使用口才对数据透视表中的项目进行分组



我在两个模型之间有关系。用户具有属于库存模型的关系。我就是这样做的。

public function inventory_items()
{
return $this->belongsToMany(
'AppItem',                             // joined model
'inventory',                        // pivot table name
'userid',                           // column name in pivot table
'item_id'                            // column name in pivot table
)->withPivot('equipped','id');
}

我目前正在获取这样的数据

$items = $user->inventory_items()->orderBy('inventory.id', 'DESC')->paginate(25);

并以这种方式列出项目。

+-------+-------------------+
|  name |item_id|description|
----------------------------|
| item 1|    1  | lorem...  |
| item 1|    1  | lorem...  |
| item 1|    1  | lorem...  |
| item 2|    2  | lorem...  |
| item 2|    2  | lorem...  |
| item 3|    3  | lorem...  |
----------------------------

如何按item_id对数据进行分组并显示计数?我想要这样的东西

+-----------+-------+------------+
|  name     |item_id|description|
--------------------------------|
|item 1 (x3)|    1  | lorem...  |
|item 2 (x2)|    2  | lorem...  |
|item 3 (x1)|    3  | lorem...  |
----------------------------------

我尝试了不同的变体

$items = $user->inventory_items()->orderBy('inventory.id', 'DESC')->groupBy("inventory.item_id")->paginate(25);

但它正在回归

This is incompatible with sql_mode=only_full_group_by

我该怎么做?最好不改变sql_mode

我认为您必须使用查询生成器:

$items = Item::join('inventory', 'inventory.item_id', 'items.id')
->where('inventory.userid', '=', $user->id)
->select('items.id', 'items.name', DB::raw('count(*)'))
->groupBy('items.id', 'items.name')
->get();

最新更新