Конструктор запросов Laravel; получение отдельных строк с суммами

#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 можно использовать так, это пригодится в будущем! Кроме того, спасибо вам за ответ на мой вопрос 🙂