Я хочу создать запись, которая извлекает данные о продажах в указанном диапазоне дат с двумя входными параметрами $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
пожалуйста, дайте мне совет, чтобы решить эту проблему.
Да. Есть ли у тебя какой-нибудь совет? @Jonas Staudenmeir






Метод 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 ()?
Если вам нужна только одна общая сумма, вы можете использовать метод sum() (без get()): AppSalesDetail::where(...)->sum('sub_total')
когда не использую -> selectRaw () Вроде. просто используется, когда мне нужно вернуть отдельные данные, а не массив.
Да вот в чем разница.
Вам нужна одна сумма за
app_sales_id, верно?