Получить коллекцию отношений столбец groupBy, а не ноль - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу получить все App\Device, где столбец location не является нулевым или пустым И отличается.

Например:

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 голосов
/ 20 февраля 2019

Вы можете сделать:

$group->devices()
    ->select('location', 'id')
    ->whereNotNull('location')
    ->groupBy('location')
    ->get()
    ->pluck('id','location');
0 голосов
/ 19 февраля 2019

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

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

Это должно удалить все нулевые значения, прежде чем они сгруппируют их.Это также сделает фильтр не нужным.

...