0

我有一个名为的表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。有没有办法让数组中的键成为相关表中的字段?

4

1 回答 1

0

我没有尝试过这些,但无论如何它应该让你接近

使用集合

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')
于 2019-03-25T22:52:54.023 回答