【问题标题】:laravel : whereHas query for getting three tables datalaravel : whereHas 查询获取三个表数据
【发布时间】:2018-10-03 03:05:13
【问题描述】:

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

users, 表user_details, 表user_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
}

我没有得到我的 userDetails 查询数据。我的代码有什么错误?

【问题讨论】:

    标签: laravel laravel-5.5


    【解决方案1】:
    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() 来获取关系。

    【讨论】:

    • 如果子查询上有另一个过滤器我该怎么办?
    • @Javed 你能举个例子吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 2022-08-19
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多