Laravel with([]) 仅选择关系的某些列

编辑

这个问题很独特,因为它提出了独特的问题,例如:

  1. 与组件之间的关系。(商品.产品.库存管理)。

  2. 大量的组件,这导致链接问题的接受答案不适用。

假设你有一个像下面这样的大 with() :

$order = Order::with([

        'company',

        'complaints',

        'person',

        'items',

        'items.product',

        'items.product.stockManagement',

        'status', 

    ])->findOrFail($id);

然后,我如何选择它们的所有关系,但选择其中一些的特定列?


$order = Order::with([

        'company',   // select only id,name, size

        'complaints',  // select only id, name , body

        'person',     

        'items',  

        'items.product',  // select only id, name , price

        'items.product.stockManagement',

        'status',  // select only id

        'items.product.media',

        'items.product.mainProduct',

        'items.product.mainProduct.media'

    ])->findOrFail($id);


Smart猫小萌
浏览 121回答 4
4回答

冉冉说

像这样:$order = Order::with([    'company:id,name,size',    'complaints:id,name,body',    'person',         'items',      'items.product:id,name,price',    'items.product.stockManagement',    'status:id',    'items.product.media',    'items.product.mainProduct',    'items.product.mainProduct.media'])->findOrFail($id);该文档对于特定列的加载非常简短(您甚至必须向下滚动一点到“急切加载特定列”的标题)。您可能并不总是需要所检索的关系中的每一列。因此,Eloquent 允许您指定要检索关系的哪些列:$books = App\Book::with('author:id,name')->get();笔记:使用此功能时,您应该始终将id 列和任何相关的外键列包含在您希望检索的列列表中。

慕标5832272

我遇到了同样的问题。您需要指定foreign idnot id (主键)。例如:Data::with('other:id,name')->get();如果你自定义了外文名称就不行了。因此,您需要完整添加您的外部列名称。Data::with('other:foreign_id,name')->get();那会起作用的!

白猪掌柜的

您还可以为一些更高级的关系查询提供回调。Order::with([    'company' => function ($q) {         $q->select('id', 'name');    }])

慕勒3428872

$order = Order::with(['company' => function($query) {    $query->select('id','name','size') }),'complaints' => function($query) {    $query->select('id','name','body') }),'person',    'items',  'items.product'  => function($query) {    $query->select('id','name','price') }), 'items.product.stockManagement','status'=> function($query) {    $query->select('id') }),'items.product.media', 'items.product.mainProduct', 'items.product.mainProduct.media'])->findOrFail($id);
打开App,查看更多内容
随时随地看视频慕课网APP