始终在 Laravel Eloquent 中获取关系模型的相关模型

Always get related model of relationship model in Laravel Eloquent

我有三个Eloquent型号:

CompanyOrdersAreaLocalization 其中一家公司有很多订单区域,而订单区域总是有一个本地化。

我需要让订单区域模型始终加载本地化

如果我这样做:

$company = auth()->user()->company;

我在没有 OrdersArea 的情况下获得了已登录用户的公司,没关系。

接下来我可以做:

$company->ordersArea;

然后我有 $company 相关模型 - OrdersArea - 但这个模型本身没有本地化,但我总是需要得到它。

在这种情况下:

$ordersArea = OrdersArea::find($id);

我还想获得带有模型的本地化 属性 ($ordersArea->localization) 的 $odersArea。

如何做到 - loading/getting $ordersArea 始终具有相关的本地化?

要加载具有 ordersArea() 关系的 Localization,您可以使用预加载。您可以在文档中阅读更多相关信息:Eager Loading.

例子

$company->ordersArea()
    ->with('localization')
    ->first();

Alternatively,您可以将 protected $with = ['localization']; 添加到您的 OrdersArea 模型中。这将始终 加载带有OrdersArea 的本地化。只有在 always 需要这种关系时才应该使用它。

您还可以在检索到父模型后检索关系。这叫做Lazy Eager Loading.

$ordersArea = OrdersArea::find($id);
$ordersArea->load('localization');

OrdersArea 模型中使用这个 -

protected $with = ['localization'];

每当您查询 OrdersArea 时,它将始终加载 localization