Группировка элементов из сводной таблицы с помощью Eloquent - PullRequest
0 голосов
/ 19 мая 2018

У меня есть отношения между двумя моделями.Пользователь имеет отношение принадлежит ToMany к модели инвентарь .Я сделал это следующим образом.

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 голосов
/ 19 мая 2018

Я думаю, вы должны использовать построитель запросов:

$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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...