在 with 查询中只查询个别字段
最近在项目开发中,调用 with
方法预加载数据,默认会把所有字段都查询出来,但是我只想查询个别字段。
百度了一下,网上列举了很多方法。试了一下,发现一个问题,如果我 select
的时候没有 id
的话就会为 null
public function brand()
{
return $this->belongsTo(Brand::class, 'brandId')->select('briefCode');
}
如果 select
的时候有 id
的话就没有问题
public function brand()
{
return $this->belongsTo(Brand::class, 'brandId')->select('id', 'briefCode');
}
网上都没有说一定要传 id
,:joy: :joy: :joy:
另外又发现一个问题:
在为预加载添加约束条件的时候,如果在闭包中指定 select 字段,最后关联也会为 null
。
$parts = ShippingOrderPart::where('id', 602)
->with(['shippingOrder' => function ($query) {
$query->select('id', 'carrier');
}])
->get();
执行的 sql 语句如下:
select * from `shipping_order_parts` where `id` = 602
select `id`, `carrier` from `shipping_order` where `shipping_order`.`id` in ('1544')
当我不指定 select 字段,结果正常。
执行的 sql 语句如下:
select * from `shipping_order_parts` where `id` = '602'
select * from `shipping_order` where `shipping_order`.`id` in ('1544')
本作品采用《CC 协议》,转载必须注明作者和本文链接
可以预加载的时候限定。
因为关联关系有用到id字段,肯定就需要查询出来,不然ORM无法关联整理成对应的数据结构。不过有更好的方法,不要约束在这个里面,如:
@doobi laravel 版本是 5.4, 不支持 :joy:
@sunny-kevin 是的,不过用查询作用域更好一些
@王成涛 这个就看你实际应用了,主要看模型的关联关系,比如关联模型比较多,分别要查询的字段不一样,用with会比较好,更加动态化。
前几天刚好也碰到这个问题要查询id才能查出数据
@sunny-kevin 文章更新,末尾添加了一点内容。在预加载的时候使用 select 指定字段,关联结果为
null
,目前还未找到原因。 :monkey_face:@王成涛 一般来说应该是select没有查出关联的字段,比如id,具体需要看下你的关联关系和你的代码才能详细给你解答
@sunny-kevin 非常感谢,原因就是按您说的,select没有查出关联的字段。thanks
你说错了不是id的问题 是你关联外键的问题,关联的外键是什么,查询的字段的时候必须要带上
@sbkk 是的 :+1: