关系为空时Laravel继续

时间:2019-01-09 14:20:31

标签: php laravel each

我正在使用以下方法来生成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();

});

但是,这显然行不通,但是我还无法弄清楚如何做到这一点。因此,任何指针将不胜感激。

3 个答案:

答案 0 :(得分:2)

您可以使用

检查是否存在关系
->has('activeDescriptions')

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

答案 1 :(得分:1)

一个简单的答案突然出现,我可以在查询中添加以下内容:

->has('activeDescriptions')

答案 2 :(得分:-1)

也许:

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

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

更新

filter可能是更好的方法(如果在查询本身中不适合haswhereHas的话):

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