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

在使用 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();
```

    A+
发布日期:2022年09月10日  所属分类:未分类

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: