获取关系集合groupBy列,不为空

时间:2019-02-19 19:36:45

标签: laravel group-by relationship

我想获取所有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
  ]
}

2 个答案:

答案 0 :(得分:0)

为什么不通过以下方法来约束条件?

$group->devices->where('location', '!=', null)->groupBy('location')

这应该在将所有空值分组之前将其删除。这也将使过滤器不再需要。

答案 1 :(得分:0)

您可以:

$group->devices()
    ->select('location', 'id')
    ->whereNotNull('location')
    ->groupBy('location')
    ->get()
    ->pluck('id','location');