Select 在 Laravel 中有一个

Select with hasOne in Laravel

我有三个模型

Posts
Users
UserImages

在我的帖子中

public function user() {
    return $this->belongsTo(new User)->with('avatar');
}

在用户中我有

public function avatar() {
    return $this->hasOne(UserImage::class)->where('type', 1); //type 1 is avatar;
}

我从 Posts controller 调用,我有下面的截图:

$posts = $this->model::select('*')->with('user')->get();

returns 信息量太大了。我想要 select 像这样的

hasOne 和 belongsTo 可以吗?

您可以加​​入预先加载查询以获得想要的结果:

$posts = $this->model::select('*')->with(['user'=>function($query) {
            $query->join('avatars', 'avatars.user_id', 'users.id')
                ->select(['users.id', 'users.name', 'users.userName', 'avatars.images_url']);
        }])->get();

要使用 'avatar' 关系,您可以使用多重预加载:

 $posts = $this->model::select('*')->with(['user'=>function($query) {
                $query->select(['users.id', 'users.name', 'users.userName'])
                ->with(['avatar'=>function($query){
                    $query->select(['user_id','images_url']);
                }]);