#php #laravel #laravel-8 #laravel-query-builder
Вопрос:
Допустим, у нас есть таблица SQL с именем BoxContents, каждая строка которой состоит из идентификатора, идентификатора коробки, идентификатора элемента и количества.
Единственным уникальным значением является идентификатор. Мне нужно ввести boxID и получить список/массив идентификаторов элементов и их ОБЩЕЕ количество;
Пример: в таблице BoxContents:
ID | Боксид | ItemId | Количество |
---|---|---|---|
1 | фу | банан | 5 |
2 | фу | обезьяна | 1 |
3 | бар | бомба | 2 |
4 | фу | банан | 5 |
5 | бар | плавка | 2 |
6 | бар | банан | 5 |
7 | фу | банан | 5 |
результат при запросе поля foo:
['banana'=>15, 'monkey'=>1]
результат при запросе строки поля:
['bomb'=>2, 'fuse'=>2, 'banana'=>5]
Как бы я сделал запрос?
DB::table('BoxContents')
->where('boxID', 'foo')
->select('itemID', SUM('quantity'))
->distinct();
это то, что я получил до сих пор, но SUM()
, очевидно, не принято в select()
Можно ли это сделать?
Ответ №1:
Вы можете сделать это с помощью selectRaw()
/ DB::raw()
:
DB::table('BoxContents')
->where('boxID', 'foo')
->select('itemID', DB::raw("SUM('quantity')"))
->distinct();
Комментарии:
1. Спасибо! Я не знал, что DB::raw можно использовать так, это пригодится в будущем! Кроме того, спасибо вам за ответ на мой вопрос 🙂