laravel eloquent -> whereHas - написать свой собственный существует (подзапрос) - PullRequest
0 голосов
/ 29 августа 2018

Laravel Eloquent ->whereHas() использует подзапрос exists() - https://dev.mysql.com/doc/refman/8.0/en/exists-and-not-exists-subqueries.html - для возврата результатов.

Я хотел бы написать свой собственный подзапрос, но я не знаю, как сообщить Eloquent -> где он.

Если я это сделаю:

$query->where( DB::raw(' exists( subquery ) ')

Вместо этого Laravel записывает подзапрос в виде:

where exists( subquery ) is null

Так что мне просто интересно, что $query->method() можно использовать для добавления подзапроса exist () к операторам where. Подзапрос будет того же типа, что и laravel, но выписан:

... and exists ( select * from `tbl` inner join `assets` on `custom_assets`.`id` = `tbl`.`asset_id` where `assets`.`deleted_at` is null and `users`.`id` = `assets`.`client_id` and `field_id` = ? and (`value` = ? and `assets`.`deleted_at` is null )

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Использование whereRaw():

$query->whereRaw('exists( subquery )')
0 голосов
/ 29 августа 2018

Читать, где описание здесь

Вы можете найти этот пример кода там. Вы также можете добавить закрытие для вашего пользовательского запроса в whereHas.

// Retrieve all posts with at least one comment containing words like foo%
$posts = App\Post::whereHas('comments', function ($query) {
    $query->where('content', 'like', 'foo%');
})->get();
...