laravel : whereHas查询获取三表数据

laravel : whereHas query for getting three tables data

定义一个获取三个 table 数据的简单查询

tableusers, table user_details, tableuser_device_datas

在我的 LoginController 上定义一个函数以从 UserDetails 模型获取数据。

 $userInformation = UserDetails::userDetail($user->id);

User 模型上定义关系

public function UserDeviceData() {
    return $this->hasMany(UserDeviceData::class);
}

public function UserDetails()
{
   return $this->hasOne(UserDetails::class);
}

UserDetails 上建模我获取数据的查询看起来像

 public static function userDetail($id){
     $result = User::whereHas('userDetails',function($query)  use ($id) {
           $query->where('user_id',$id); 
        })->whereHas('UserDeviceData',function($query)  use ($id) {
           $query->where('user_id',$id);
        })->where('user.id', $id)
        ->with('userDetails','UserDeviceData')
        ->first();
} 

我得到的回复:

 "userInfo": {
    "id": 2,
    "name": null,
    "email": "test@test.com",
    "phone": null,
    "address": null,
    "company": null,
    "description": null,
    "device_id": null,
    "system_role": "User",
    "status": "Active",
    "otp_verify_id": "253526851",
    "parent_id": 0,
    "last_login": "2018-04-23 12:03:43",
    "profile_picture": null,
    "business_card_pic": null
}

我没有在 query.what 上获取我的 userDetails 数据是我的代码有误吗?

public static function userDetail($id){
     $result = User::whereHas('userDetails',function($query)  use ($id) {
            $query->where('user_id',$id); 
        })->whereHas('UserDeviceData',function($query)  use ($id) {
           $query->where('user_id',$id);
        })->where('users.id',$id)
        ->with(['UserDetails' => function($query) use ($id){

               $query->where('user_id',$id); 

         }, 
         'UserDeviceData' => function($query) use ($id){
             $query->where('user_id',$id); 

         }
])
        ->first();
       return $result ;
} 

你也必须使用 with() 来获取关系。