首页 > 解决方案 > 总是在 Laravel Eloquent 中获取关系模型的相关模型

问题描述

我有三个 Eloquent 模型:

Company,一个公司OrdersAreaLocalization很多订单区域,订单区域总是有一个本地化。

我需要让 Orders Area 模型始终加载本地化

如果我这样做:

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

我得到了没有 OrdersArea 的登录用户公司,没关系。

接下来我可以这样做:

$company->ordersArea;

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

在这种情况下:

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

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

如何做到这一点 - 加载/获取 $ordersArea 总是与相关的本地化?

标签: phplaravellaravel-8php-7.4

解决方案


要使用关系加载本地化ordersArea(),您可以使用急切加载。您可以在文档中阅读有关此内容的更多信息:Eager Loading

例子

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

或者,您可以将 添加protected $with = ['localization'];到您的OrdersArea模型中。这将始终使用OrdersArea. 仅当始终需要该关系时才应使用它。

您还可以在检索到父模型后检索关系。这称为延迟加载

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

推荐阅读