菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
1291
11

在 with 查询中只查询个别字段

原创
05/13 14:22
阅读数 2079

最近在项目开发中,调用 with 方法预加载数据,默认会把所有字段都查询出来,但是我只想查询个别字段。
百度了一下,网上列举了很多方法。试了一下,发现一个问题,如果我 select 的时候没有 id 的话就会为 null

public function brand()
 {
        return $this->belongsTo(Brand::class, 'brandId')->select('briefCode');
 }

file
如果 select 的时候有 id 的话就没有问题

public function brand()
 {
        return $this->belongsTo(Brand::class, 'brandId')->select('id', 'briefCode');
 }

file

网上都没有说一定要传 id,:joy: :joy: :joy:

另外又发现一个问题:

在为预加载添加约束条件的时候,如果在闭包中指定 select 字段,最后关联也会为 null

$parts = ShippingOrderPart::where('id', 602)
            ->with(['shippingOrder' => function ($query) {
                $query->select('id', 'carrier');
            }])
            ->get();

file
执行的 sql 语句如下:

select * from `shipping_order_parts`  where `id` = 602
select `id`, `carrier` from `shipping_order` where `shipping_order`.`id` in ('1544')

当我不指定 select 字段,结果正常。
file
执行的 sql 语句如下:

select * from `shipping_order_parts` where `id` = '602'
select * from `shipping_order` where `shipping_order`.`id` in ('1544')

发表评论

0/200
1291 点赞
11 评论
收藏
为你推荐 换一批