Laravel продолжить, когда связь пуста

Я использую следующий метод для создания раскрывающегося списка descriptions с их соответствующим category как optgroup. Category имеет много Descriptions,

Так что в этом случае мой activeDescriptions мое отношение внутри меня Category модель.

public static function descriptions()
{
static::active()
->with('activeDescriptions')
->orderBy('name', 'asc')
->get()
->each(function ($category) use (&$descriptions) {
$descriptions[$category->name] = $category->activeDescriptions->pluck('name', 'id')->sortBy('name')->toArray();
});

return $descriptions;
}

Дело в том, что когда у категории нет описаний, я хочу вообще исключить ее из выпадающего списка. Так что я думал об использовании чего-то вроде:

->each(function ($category) use (&$descriptions) {

if($category->doesnthave('activeDescriptions'))
{
continue;
}

$descriptions[$category->name] = $category->activeDescriptions->pluck('name', 'id')->sortBy('name')->toArray();

});

Но это не работает, очевидно, но я не смог понять, как этого добиться. Так что любые указатели будут оценены.

0

Решение

Вы можете проверить, существуют ли отношения, используя

->has('activeDescriptions')

https://laravel.com/docs/5.7/eloquent-relationships#querying-relationship-existence

2

Другие решения

Простой ответ, который только что всплыл в моей голове, я мог бы просто добавить следующее к моему запросу:

->has('activeDescriptions')
1

Может быть:

if (!$category->('activeDescriptions')->count()) {
continue;
}

или же

if (!count($category->('activeDescriptions')) {
continue;
}

Обновить

фильтр может быть лучшим подходом (если не собирается has или же whereHas в самом запросе):

$filtered = $categories->filter(function ($category) {
return $category->activeDescriptions->count() === 0;
});
-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector