为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
Smart猫小萌 2023-07-01 15:16:10
编辑这个问题很独特,因为它提出了独特的问题,例如:与组件之间的关系。(商品.产品.库存管理)。大量的组件,这导致链接问题的接受答案不适用。假设你有一个像下面这样的大 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);
查看完整描述

4 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

像这样:


$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 列和任何相关的外键列包含在您希望检索的列列表中。


查看完整回答
反对 回复 2023-07-01
?
慕标5832272

TA贡献1966条经验 获得超4个赞

我遇到了同样的问题。您需要指定foreign idnot id (主键)

例如:

Data::with('other:id,name')->get();

如果你自定义了外文名称就不行了。因此,您需要完整添加您的外部列名称

Data::with('other:foreign_id,name')->get();

那会起作用的!


查看完整回答
反对 回复 2023-07-01
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

您还可以为一些更高级的关系查询提供回调。


Order::with([

    'company' => function ($q) {

         $q->select('id', 'name');

    }

])


查看完整回答
反对 回复 2023-07-01
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

$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);



查看完整回答
反对 回复 2023-07-01
  • 4 回答
  • 0 关注
  • 116 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信