Группировать и рассчитывать на связанную модель - PullRequest
0 голосов
/ 25 марта 2019

У меня есть таблица с именем item, которая имеет отношение отношение к таблице с именем source. Я хочу сгруппировать все элементы по их источнику, и в конце я хочу массив, в котором ключом является source->name, а в качестве значения - число связанных элементов.

Это то, что у меня так далеко:

Item::where('type', '=', Item::TYPE_POST)
  ->with('source')
  ->select('source_id', DB::raw('count(*) as total'))
  ->groupBy('source_id')
  ->pluck('total', 'source_id')
  ->all();
array:1 [
  89 => 149
]

Это дает мне структуру, которую я хочу, но элементы сгруппированы не по source->name, а по source_id, что является полем в таблице Item. Есть ли способ получить ключ в массиве в виде поля из связанной таблицы?

1 Ответ

0 голосов
/ 26 марта 2019

Я не пробовал их, но это все равно должно вас закрыть

Использование коллекций

Item::where('type', '=', Item::TYPE_POST)
    ->with('source.name')
    ->get()
    ->mapWithKeys(function ($item) {
        return [$item->service->name => $item];
    })
    ->map(function ($items, $name) {
        return [
            $name => $items->count()
        ];
    });

Использование запроса

DB::table('items')
    ->selectRaw('sources.name as name, count(*.items) as count')
    ->join('sources', 'sources.id', 'items.source_id')
    ->where('type', '=', Item::TYPE_POST)
    ->groupBy('sources.id')
    ->get()
    ->pluck('count', 'name')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...