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()
来获取关系。
定义一个获取三个 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()
来获取关系。