Метод withExists
Метод withExists применяется к запросу Eloquent
и позволяет проверить существование связанных записей.
Он добавляет колонку с булевым значением, показывающим,
имеет ли модель связанные записи. Первым параметром
передаётся имя отношения, вторым необязательным -
алиас для колонки.
Синтаксис
<?php
Model::withExists($relation, $alias);
?>
Пример
Давайте получим все категории и для каждой проверим, есть ли у неё хотя бы одна статья:
<?php
namespace AppHttpControllers;
use AppModelsCategory;
class CategoryController extends Controller
{
public function index()
{
$categories = Category::withExists('articles')->get();
foreach ($categories as $category) {
echo $category->name . ': ' . ($category->articles_exists ? 'has articles' : 'no articles');
}
}
}
?>
Результат выполнения кода:
"Technology: has articles"
"Science: no articles"
"Art: has articles"
Пример
Давайте укажем алиас для колонки с результатом проверки:
<?php
namespace AppHttpControllers;
use AppModelsArticle;
class ArticleController extends Controller
{
public function index()
{
$articles = Article::withExists('comments', 'has_comments')
->get();
foreach ($articles as $article) {
echo $article->title . ': ' . ($article->has_comments ? 'has comments' : 'no comments');
}
}
}
?>
Результат выполнения кода:
"article 1: has comments"
"article 2: no comments"
"article 3: has comments"
Пример
Метод withExists также работает с отношениями,
которые используют условия. Давайте проверим, есть ли
у пользователей активные заказы:
<?php
namespace AppHttpControllers;
use AppModelsUser;
class UserController extends Controller
{
public function index()
{
$users = User::withExists(['orders' => function ($query) {
$query->where('status', 'active');
}])->get();
foreach ($users as $user) {
echo $user->name . ': ' . ($user->orders_exists ? 'has active orders' : 'no active orders');
}
}
}
?>
Результат выполнения кода:
"Alice: has active orders"
"Bob: no active orders"
"Charlie: has active orders"