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

时间:2018-05-19 18:01:33

标签: php laravel eloquent

我有两个模特之间的关系。 用户的关系为belongsToMany与广告资源模型的关系。我这样做了。

public function inventory_items()
{
    return $this->belongsToMany(
        'App\Item',                             // 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

1 个答案:

答案 0 :(得分:1)

我认为你必须使用查询构建器:

$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();