首页 > 其他 > 详细

laravel with 渴求式加载指定字段

时间:2016-06-17 16:56:52      阅读:361      评论:0      收藏:0      [点我收藏+]

在使用 Laravel 的关联查询中,我们经常使用 with 方法来避免 N+1 查询,但是 with 会将目标关联的所有字段全部查询出来,对于有强迫症的我们来说,当然是不允许的。

这时候我们可以使用下面的技巧在使用 with 时只查询目标关联的部分字段:

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

但是每次查询都写得这么繁琐真的好么?不如利用 Laravel 的范围查询将其封装起来:

在 Model 基类中定义一个范围查询

class BaseModel extends \Eloquent{
    public function scopeWithCertain($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)->withCertain(‘user‘, [‘username‘])->get();

laravel with 渴求式加载指定字段

原文:http://www.cnblogs.com/lpfuture/p/5594221.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!