Laravel查询生成器 - 其中有查询选择值

时间:2018-06-05 18:05:03

标签: laravel eloquent laravel-5.6

我很困惑whereHas函数是如何工作的?

我想检查来自Main Query的whereHas内的列。

ClientSeatController.php

$seats = ClientSeat::where('clientId',$req->clientId)
          ->wherehas('services',function($query) use($req){
            $query->where('clientId',$req->clientId);
          })->get(); 

ClientSeat.php(关系)

public function services(){
    return $this->hasOne(ClientSeatService::class,'clientSeatId','clientSeatId');
}

toSql();

select * from `sln_client_seats` where `clientId` = 3 and exists (select * from `sln_client_seat_services` where `sln_client_seats`.`clientSeatId` = `sln_client_seat_services`.`clientSeatId` and `clientId` = 3)

我需要如下的查询。

select * from `sln_client_seats` where `clientId` = 3 and exists (select * from `sln_client_seat_services` where `sln_client_seat_services`.`clientSeatId` =`sln_client_seats`.`clientSeatId`  and `clientId` = 3)

我想检查 client_seat_services 表的 clientSeatId ,并在whereHas函数中使用client_seats表列的clientSeatId。

查询没有正确执行预期的。

请帮帮我。

1 个答案:

答案 0 :(得分:0)

$query->where('clientSeatId','client_seats.clientSeatId');关闭中移除whereHas。您的ClientSeat::services()方法已经定义了该关系的一部分。你在那里写它的方式实际上将字符串“client_seats.clientSeatId”放在查询中,而不是实际的Id值。因此,您不会收到错误,所有结果都将为空。