I have three Eloquent Models:
Company
, OrdersArea
and Localization
where a company has many orders areas and orders area always have one localization.
I need to getting the Orders Area model to always load with Localization
If I do that:
$company = auth()->user()->company;
I gets Company of logged user without OrdersArea and it’s ok.
and next I could do:
$company->ordersArea;
and then I have in $company related models – OrdersArea – but this models doesn’t have Localization in itself but I need to get this always.
And in this situation:
$ordersArea = OrdersArea::find($id);
I want to get also $odersArea with localization property ($ordersArea->localization) with model.
How to do that – loading/getting $ordersArea always with related localization?
Advertisement
Answer
To load the Localization with the ordersArea()
relation, you can use Eager loading. You can read more about this in the documentation: Eager Loading.
Example
$company->ordersArea() ->with('localization') ->first();
Alternatively, you can add the protected $with = ['localization'];
to your OrdersArea
model. This will always load the localization with the OrdersArea
. You should only use this if that relation is always required.
You can also retrieve the relation after the parent model has already been retrieved. This is called Lazy Eager Loading.
$ordersArea = OrdersArea::find($id); $ordersArea->load('localization');