laravel中with函数如何返回指定的列

发布时间:2022-09-10 00:13:22 阅读:979次

在使用 Laravel 的关联查询中,我们经常使用 with 方法来避免 N+1 查询,但是 with 会将目标关联的所有字段全部查询出来

如何只返回指定的列呢

以下为代码

$topics = Topic::limit(1)->with(['user'=>function($query){
   $query->select('id','username');
}])->get();

或者

$topics = Topic::limit(1)->with(['user:id,username'])->get();

我们还可以这么操作

利用 Laravel 的范围查询将其封装起来:

在 Model 基类中定义一个范围查询(或者使用 Trait)

class BaseModel extends \Eloquent{
    public function scopeWithOnly($query, $relation, Array $columns)
    {
        return $query->with([$relation => function ($query) use ($columns){
            $query->select(array_merge(['id'], $columns));
        }]);
    }
}
在我们普通的 Model 类都继承基类:

class Topic extends BaseModel{
    public function user()
    {
        return $this->belongsTo('User');
    }
}
然后使用就很方便了:

$topics = Topic::limit(2)->withOnly('user', ['username'])->get();

如有问题,可以QQ搜索群1028468525加入群聊,欢迎一起研究技术

支付宝 微信

有疑问联系站长,请联系QQ:QQ咨询

转载请注明:laravel中with函数如何返回指定的列 出自老鄢博客 | 欢迎分享