我很困惑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。
查询没有正确执行预期的。
请帮帮我。
答案 0 :(得分:0)
从$query->where('clientSeatId','client_seats.clientSeatId');
关闭中移除whereHas
。您的ClientSeat::services()
方法已经定义了该关系的一部分。你在那里写它的方式实际上将字符串“client_seats.clientSeatId”放在查询中,而不是实际的Id值。因此,您不会收到错误,所有结果都将为空。