В этом посте я хотел бы поделиться с вами, опытом использования подзапросов с использованием whereIn
и whereNotIn
.
Иногда нам может потребоваться создать запрос на выборку, с использование SQL оператора WHERE
с условиями IN
или NOT IN
. Возможно, что вы знаете как написать запрос, используя MySQL, но испытываете затруднение в построении запроса с использованием Laravel Query Builder. В этом примере мы узнаем, как преобразовать запрос MySQL в Laravel Query Builder.
Сначала мы cформируем запрос на SQL, преобразуем его в Laravel Query Builder.
В этом примере у меня есть две таблицы:
users
users_invited
WHERE IN
В первом запросе нам требуется выбрать пользователей, которые присутствуют только в таблице users_invited. Сделать это мы можем, используя приведенный ниже SQL-запрос:
SELECT * FROM `users` WHERE `id` IN (SELECT `user_id` FROM `users_invited`)
Этот же запрос с использованием Laravel Query Builder:
$users = DB::table("users")->select('*')
->whereIn('id',function($query) {
$query->select('user_id')->from('invite_users');
})
->get();
WHERE NOT IN
Во втором запросе нам необходимо выбрать пользователей, которых нет в таблице users_invited. SQL-запрос:
SELECT * FROM `users` WHERE `id` NOT IN ( SELECT `user_id` FROM `invite_users` )
Laravel Query Builder:
$users = DB::table("users")->select('*')
->whereNOTIn('id', function($query) {
$query->select('user_id')->from('invite_users');
})
->get();
Перевод статьи «Laravel 5 — whereIn and whereNotIn with subquery example using query builder».