Laravel продолжить, когда связь пуста - PullRequest
0 голосов
/ 09 января 2019

Я использую следующий метод для создания выпадающего списка descriptions с соответствующей им category в качестве optgroup. A 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();

});

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

Ответы [ 3 ]

0 голосов
/ 09 января 2019

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

->has('activeDescriptions')
0 голосов
/ 09 января 2019

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

->has('activeDescriptions')

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

0 голосов
/ 09 января 2019

Может быть:

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

или

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

Обновление

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

$filtered = $categories->filter(function ($category) {
    return $category->activeDescriptions->count() === 0;
});
...