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

Метод orWhereHas

Метод orWhereHas применяется к запросу Eloquent и добавляет условие, которое проверяет существование связанных записей. Данный метод работает аналогично whereHas, но добавляет условие через логическое ИЛИ. Первым параметром передаётся имя отношения, вторым - замыкание, в котором задаются условия для связанных записей. Третьим необязательным параметром можно указать оператор сравнения, а четвёртым - количество связанных записей.

Синтаксис

<?php Model::orWhereHas($relation, $callback, $operator, $count); ?>

Пример

Давайте получим все статьи, у которых статус 'published' или есть комментарии:

<?php use AppModelsArticle; $articles = Article::where('status', 'published') ->orWhereHas('comments', function ($query) { $query->where('is_active', true); }) ->get(); foreach ($articles as $article) { echo $article->title; } ?>

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

"article 1" "article 3" "article 5"

Пример

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

<?php use AppModelsUser; $users = User::where('role', 'admin') ->orWhereHas('posts', function ($query) { $query->whereYear('created_at', '>', 2025); }) ->get(); foreach ($users as $user) { echo $user->name; } ?>

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

"John Doe" "Jane Smith" "Bob Johnson"

Пример с количеством записей

Давайте получим категории, у которых название 'popular' или количество товаров больше 5:

<?php use AppModelsCategory; $categories = Category::where('name', 'popular') ->orWhereHas('products', function ($query) { $query->where('is_active', true); }, '>', 5) ->get(); foreach ($categories as $category) { echo $category->name; } ?>

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

"popular" "electronics" "books"

Пример с вложенными условиями

Давайте получим посты, у которых автор активен или есть комментарии от пользователей с рейтингом выше 4:

<?php use AppModelsPost; $posts = Post::whereHas('author', function ($query) { $query->where('is_active', true); }) ->orWhereHas('comments', function ($query) { $query->whereHas('user', function ($subQuery) { $subQuery->where('rating', '>', 4); }); }) ->get(); foreach ($posts as $post) { echo $post->title; } ?>

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

"Post 1" "Post 4" "Post 7"

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

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