我想获取所有App\Device
,其中列location
不为null或为空且与众不同。
例如:
Device 1->location = "Athens"
Device 2->location = "Athens"
Device 3->location = NULL
Device 4->location = "Berlin"
我正在寻找的结果是一个数组,该数组将具有key
的位置名称和作为计数的值
array(
"Athens" => 2,
"Berlin" => 1
);
我正在尝试下面的单行代码,但某些方法无法正常工作:
$group->devices->groupBy('location')->filter(function ($value, $key) { return !is_null($key); })->count()
提示
该行:
$group->devices->groupBy('location')
返回:
Collection {#260 ▼
#items: array:2 [▼
"Athens" => Collection {#270 ▶}
"" => Collection {#124 ▶} // Here is a device with "location" column null but i don't want this in my array
]
}
答案 0 :(得分:0)
为什么不通过以下方法来约束条件?
$group->devices->where('location', '!=', null)->groupBy('location')
这应该在将所有空值分组之前将其删除。这也将使过滤器不再需要。
答案 1 :(得分:0)
您可以:
$group->devices()
->select('location', 'id')
->whereNotNull('location')
->groupBy('location')
->get()
->pluck('id','location');