Метод has
Метод has применяется к запросу Eloquent
и позволяет отфильтровать записи по наличию
или отсутствию связанных моделей. Первым параметром
передаётся имя отношения, вторым - оператор сравнения
(по умолчанию '>='), третьим - количество связанных
записей (по умолчанию 1).
Синтаксис
<?php
Model::has($relation, $operator = '>=', $count = 1);
?>
Пример
Давайте получим всех пользователей, у которых есть хотя бы одна статья:
<?php
use AppModelsUser;
$users = User::has('articles')->get();
foreach ($users as $user) {
echo $user->name;
}
?>
Результат выполнения кода:
["John Doe", "Jane Smith", "Bob Johnson"]
Пример
Давайте получим пользователей, у которых как минимум три статьи:
<?php
use AppModelsUser;
$users = User::has('articles', '>=', 3)->get();
foreach ($users as $user) {
echo $user->name . ' - ' . $user->articles()->count();
}
?>
Результат выполнения кода:
["John Doe - 5", "Jane Smith - 3"]
Пример
Давайте получим пользователей, у которых нет
ни одной статьи (используем метод doesntHave):
<?php
use AppModelsUser;
$users = User::doesntHave('articles')->get();
foreach ($users as $user) {
echo $user->name;
}
?>
Результат выполнения кода:
["Alice Brown", "Charlie Wilson"]
Пример
Давайте получим пользователей, у которых
количество статей больше 2, но меньше 5
(комбинируем с методом where):
<?php
use AppModelsUser;
$users = User::has('articles', '>', 2)
->has('articles', '<', 5)
->get();
foreach ($users as $user) {
echo $user->name . ' - ' . $user->articles()->count();
}
?>
Результат выполнения кода:
["Jane Smith - 3"]
Смотрите также
-
метод
whereHas,
который добавляет условия к связанным записям -
метод
has,
который проверяет существование связанных записей -
метод
whereDoesntHave,
который добавляет условия при отсутствии связей -
метод
doesntHave,
который проверяет отсутствие связанных записей