首页 > 解决方案 > 如何在 Laravel 中使用子句进行链接

问题描述

我有一个用户模型,它有很多订单(订单模型),每个订单都属于一个翻译器(翻译器模型)。

我试图达到的行为是当我通过他的 ID 获取用户时,我想获取他的订单以及与每个订单关联的翻译。

我尝试使用此代码:$user = User::where('id', $id->id)->with('orders')->with('translator')->get();,我希望它会返回正确的数据,应该是这样的:

{
   ...user data,
   orders: [
       {
           ...order_data,
           translator: {
              ...translator_data
           }
       }
   ]
}

但这不起作用。无论如何在 Laravel 中有这种行为吗?

标签: mysqllaravel

解决方案


您可以使用 预先加载嵌套关系.来区分这一点:

$user = User::where('id', $id->id)->with('orders.translator')->first();
// or
$user = User::with('orders.translator')->find($id->id);

旁注,如果$id是 User 实例,您可以 Lazy Eager 加载关系:

$id->load('orders.translator');

Laravel 7.x 文档 - Eloquent - 关系 - 急切加载 - 嵌套急切加载 with

Laravel 7.x 文档 - Eloquent - 关系 - 急切加载 - 懒惰急切加载 load


推荐阅读