【问题标题】:How to eager load relationships on multiple levels?如何在多个级别上急切加载关系?
【发布时间】:2017-05-24 15:24:11
【问题描述】:

我有以下型号:

产品A - 产品B - 功能 - 选项

我有以下关系:

ProductA 属于多个 ProductB ProductB 属于ToMany 特征 特征属于ToMany 选项

当我想查看 ProductA 的详细信息时(带有 ProductA id 的帖子,将由控制器管理)我想急切加载所有关系 将包含所有详细信息的变量传递给视图。

是否可以使用单个 Eloquent 指令?

类似这样的事情(我知道它不起作用):这是正确的方法吗?

$prodcutDetails = ProductA->with('product_b')->with('features')->with('option')->find($id);

谢谢

【问题讨论】:

    标签: laravel eloquent eager-loading


    【解决方案1】:

    您可以使用点符号来预先加载关系的关系。像这样:

    $prodcutDetails = ProductA::with(['product_b', 'product_b.features', 'product_b.features.option'])->find($id);
    

    【讨论】:

    • option 与 product_b 没有直接关系,而是与 features 直接相关
    【解决方案2】:

    @Jerodev 上面给出了一个很好的答案,但是多重关系是多余的;使用$prodcutDetails = ProductA::with('product_b.features.option')->find($id); 会更高效,您仍然可以访问product_bproduct_b.features

    【讨论】:

      猜你喜欢
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 2016-06-06
      • 2019-01-22
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多