Laravel-admin 查询过滤功能多表关联疑问

在使用laravel-admin中,需要对数据进行查询过滤,查看文档并实现了该功能,但是在debug sql语句的过程中发现,使用关联查询第一步sql会获取所有字段,实际上只需要获取到id字段,想知道可以自己限制这个字段么,或者有什么更好的优化办法么.
以下是表结构以及sql语句(为减少文字量,表结构已进行精简)

字段(users表)
id
username
字段(address表)
id
uid
height
address

通过users表对应的页面查询对应address表中height在10-20之间的数据debug出的两条sql

select * from `users` where exists (select * from `address` where `users`.`id` = `address`.`uid` and `height` between '10' and '20') order by `id` desc limit 20 offset 0

select  `id`, `uid`, `height`  from  `address`  where  `address`.`uid`  in (8) // 8为上一步查出来的id

疑问就是第一条sql的select * 换成select id是不是更好

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2

我猜测可能是不知道关联字段,所以要查出所有字段然后再进行下一步,那这样的话为啥不先找到关联字段然后再查呢 :joy:

4年前 评论

改下关联模型应该是可以的,我没试过,你可以试试

class User extends Model
{
    public function addresses()
    {
        return $this->hasMany(Address::class, 'uid')->select('id', 'uid', 'height', 'address');
    }
}
4年前 评论
liunian-zy (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!