我正在使用以下方法来生成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 :(得分: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可能是更好的方法(如果在查询本身中不适合has
或whereHas
的话):
$filtered = $categories->filter(function ($category) {
return $category->activeDescriptions->count() === 0;
});