Сбор коллекции по идентификатору отношения и получить счет
У меня есть модель проекта и страны. Существует множество отношений. Я получаю проекты со странами. Результат ниже
array:5 [▼
0 => array:5 [▼
"id" => 2
"account_id" => 1
"start_date" => "Jul 2012"
"end_date" => "Aug 2013"
"countries" => array:1 [▼
0 => array:2 [▼
"id" => 148
"pivot" => array:2 [▶]
]
]
]
1 => array:5 [▶]
2 => array:5 [▶]
3 => array:5 [▶]
4 => array:5 [▶]
]
Я хочу подсчитать все уникальные страны. В настоящее время я делаю это таким образом
$projects->pluck('countries')->collapse()->pluck('id')->unique()->count()
Вопрос. Могу ли я использовать pluck с вложенным столбцом отношений и есть более короткое и хорошее решение? например вот так
$projects->pluck('countries.id')->count();
3 ответа
Решение
Вы можете использовать это:
$projects->pluck('countries.*.id')->flatten()->unique()->count()
Вы не можете использовать:
$projects->pluck('countries.id')...
Потому что страны это массив массивов. Но вы можете использовать 'countries.*.id'
на эти случаи
Или наоборот...
Country::whereHas('projects', function ($query) {
// $query->where(); if you want to limit the projects
})->count();
Вы получаете уникальные страны с момента получения из таблицы стран
Я нахожу это решение
$projects->groupBy('countries.*.id')->count();