Laravel Query Builder - где с запросом выбрать значение - PullRequest
0 голосов
/ 05 июня 2018

Я очень смущен тем, как работает функция whereHas?

Я хочу проверить столбец внутри whereHas из основного запроса.

ClientSeatController.php

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

ClientSeat.php (Relation)

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)

Я хочу проверить таблицу clientSeatId из client_seat_services с помощью clientSeatId столбца таблицы client_seats внутри функции whereHas.

Запрос не выполняется должным образом.

Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 06 июня 2018

Удалите $query->where('clientSeatId','client_seats.clientSeatId'); из вашего whereHas закрытия.Ваш ClientSeat::services() метод уже определяет эту часть отношений.То, как вы это написали, буквально поместит в запрос строку «client_seats.clientSeatId», а не фактическое значение Id.Таким образом, вы не получите ошибку, и все ваши результаты будут пустыми.

...