laravel eloquent with in with select return null

时间:2017-11-26 16:59:12

标签: laravel

我使用laravel雄辩的关系,我有一个问题。

这些是我雄辩的模特;

class Post extends BaseModel
{

    public function user()
    {
        return $this->belongsTo(User::class, 'user_id', 'id');
    }

}


class User extends BaseModel 
{

    public function userInfo()
    {
       return $this->hasOne(UserInfo::class,'user_id','id');
    }
}


class UserInfo extends BaseModel
{


}

当我使用以下代码时,user_info为空。

$posts = Post::with(['user' => function ($query) {
    $query->with(['userInfo' => function ($query) {
        $query->select(['nickname','avatar']);
    }]);
}])->paginate(10)
    ->toArray();

当我提出请求时,结果是

{
    "id": 10,
    "community_id": 1,
    "title": "biaoti",
    "desc": null,
    "content": "abc",
    "user_id": 1,
    "user": {
        "id": 1,
        "mobile_phone": "13800000003",
        "user_info": null
    }
}

但以下代码是normall。

$posts = Post::with(['user' => function ($query) {
    $query->with(['userInfo' => function ($query) {
        // $query->select(['nickname','avatar']);
    }]);
}])->paginate(10)
    ->toArray();

当我提出要求时,结果是:

{
    "id": 10,
    "community_id": 1,
    "title": "biaoti",
    "desc": null,
    "content": "abc",
    "user_id": 1,
    "user": {
        "id": 1,
        "mobile_phone": "13800000003",
        "user_info": {
            "id": 1,
            "user_id": 1,
            "nickname": "devkang",
            "avatar": "",
            "birthday": "1989-01-30",
            "sex": 1,
            "identity": 1,
            "region_id": 1
        }
    }
}
你可以帮帮我吗?我不知道如何使用它,我想从user_info中选择一些字段。

1 个答案:

答案 0 :(得分:4)

这种情况正在发生,因为您在使用user_id方法时排除select个外键。要修复它,请在列表中添加外键:

$query->select(['nickname', 'avatar', 'user_id']);