下面我们来看一篇关于Laravel Eloquent下with() 函数只返回指定列的例子,希望这个例子能够为各位带来帮助,具体的如下所示。
通过 with 函数获取数据的例子参照:laravel实现一对多关联模型数据查询
接着上面这篇文章,我们知道这里获取的是 user 的所有字段信息,但是我们可能并不需要 user 表中所有的字段,例如我们只需要 id 和 name 两个字段,即:
select * from `posts` select id,name from `users` where `users`.`id` in (<1>,<2>)
我们可以通过下面四种方法来实现
方法一:在 with() 中指定
Post::with(['user' => function($query) { $query->select('id','name'); }])->get();
方法二:修改 Model 文件
修改 Post.php 文件中 user() 方法:
public function user() { return $this->belongsTo('User')->select(['id', 'name']); }
然后直接调用:
Post::with('methodUser')->get();
方法三:
在 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'); } }
然后使用就很方便了:
Posts::find(20)->withOnly('user', ['name'])->get();
方法四:
直接:
Posts::find(20)->with('methodUser:id,name')->get();