Как объединить sum () where between и group by statement в красноречивом orm?

Я хочу создать запись, которая извлекает данные о продажах в указанном диапазоне дат с двумя входными параметрами $date_from и $date_to поэтому я пытаюсь объединить некоторые функции SQL для этого:

public function print_report(Request $request) {
    $from = "2018-04-03";
    $to = "2018-04-17";
    $data = AppSalesDetail::select('app_sales_detail.*','app_sales.*')
        ->leftJoin('app_sales','app_sales.app_sales_id','=','app_sales_detail.app_sales_id')    
        ->whereBetween('sale_date', array($from, $to))
        ->groupBy("app_sales_detail.app_sales_id")  
        ->sum('app_sales_detail.sub_total')
        ->get();
}

Прежде чем я добавлю ->sum('app_sales_detail.sub_total') внутри запроса, все работает нормально, как я ожидал, но эта ошибка возникает после того, как я вставлю эту функцию

Call to a member function groupBy() on string

пожалуйста, дайте мне совет, чтобы решить эту проблему.

Вам нужна одна сумма за app_sales_id, верно?

Jonas Staudenmeir 15.05.2018 15:56

Да. Есть ли у тебя какой-нибудь совет? @Jonas Staudenmeir

Alimin 15.05.2018 16:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Метод sum() возвращает только одну строку, ее нужно добавить в select().
. Вы также не можете выбрать все столбцы:

$data = AppSalesDetail::select('app_sales_detail.app_sales_id')
    ->selectRaw('SUM(sub_total) sub_total')
    ->leftJoin('app_sales','app_sales.app_sales_id','=','app_sales_detail.app_sales_id')    
    ->whereBetween('sale_date', array($from, $to))
    ->groupBy("app_sales_detail.app_sales_id")  
    ->get();

это работает. большое спасибо @Jonas Staudenmeir. но не могли бы вы объяснить мне больше? Я думаю, когда мы сделаем агрегатную функцию, основываясь на вашем ответе. это значит, что нам нужна команда -> selectRaw ()?

Alimin 15.05.2018 17:10

Если вам нужна только одна общая сумма, вы можете использовать метод sum() (без get()): AppSalesDetail::where(...)->sum('sub_total')

Jonas Staudenmeir 15.05.2018 17:16

когда не использую -> selectRaw () Вроде. просто используется, когда мне нужно вернуть отдельные данные, а не массив.

Alimin 15.05.2018 17:32

Да вот в чем разница.

Jonas Staudenmeir 15.05.2018 17:33

Другие вопросы по теме