РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
310 of 1392 menu

Метод whereExists

Метод whereExists применяется к запросу Eloquent или Query Builder и добавляет условие EXISTS в SQL-запрос. В качестве единственного параметра передаётся замыкание, в котором строится подзапрос. Основная задача метода - выбрать те записи, для которых существует хотя бы одна запись в подзапросе. Метод полезен для проверки наличия связанных данных без их загрузки.

Синтаксис

<?php Model::whereExists(Closure $callback); ?>

Пример

Давайте выберем всех пользователей, у которых есть хотя бы одна статья:

<?php use App\Models\User; use App\Models\Article; $users = User::whereExists(function ($query) { $query->selectRaw('1') ->from('articles') ->whereColumn('articles.user_id', 'users.id'); })->get(); foreach ($users as $user) { echo $user->name; } ?>

Результат выполнения кода:

"John Doe" "Jane Smith" "Mike Johnson"

Пример

Давайте отфильтруем категории, к которым привязаны активные товары:

<?php use App\Models\Category; use App\Models\Product; $categories = Category::whereExists(function ($query) { $query->select('id') ->from('products') ->whereColumn('products.category_id', 'categories.id') ->where('products.status', 'active'); })->get(); foreach ($categories as $category) { echo $category->name; } ?>

Результат выполнения кода:

"Electronics" "Clothing" "Books"

Пример

Давайте найдём заказы, у которых есть хотя бы один товар с ценой выше 1000 рублей:

<?php use App\Models\Order; use App\Models\OrderItem; $orders = Order::whereExists(function ($query) { $query->select('id') ->from('order_items') ->whereColumn('order_items.order_id', 'orders.id') ->where('order_items.price', '>', 1000); })->get(); foreach ($orders as $order) { echo $order->id; } ?>

Результат выполнения кода:

"1" "3" "5" "7"

Пример

Давайте выберем пользователей, у которых есть комментарии с длиной текста более 100 символов:

<?php use App\Models\User; use App\Models\Comment; $users = User::whereExists(function ($query) { $query->select('id') ->from('comments') ->whereColumn('comments.user_id', 'users.id') ->whereRaw('LENGTH(comments.text) > 100'); })->get(); foreach ($users as $user) { echo $user->name; } ?>

Результат выполнения кода:

"Alice" "Bob"

Смотрите также

  • метод whereNotExists,
    который проверяет отсутствие записей в подзапросе
  • метод whereHas,
    который добавляет условие по существованию отношений
  • метод whereDoesntHave,
    который добавляет условие отсутствия отношений
  • метод get,
    который выполняет запрос и возвращает коллекцию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить