Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Доброго времени суток
Возникли проблемы с использованием конструктора запросов, а конкретнее появились несколько вопросов:
- как использовать в конструкторе хранимые процедуры/функции?
- как использовать в конструкторе сложные операторы типа CASE/IF?
- и главное, по документации составил запрос, выдает ошибки в разных местах на использование функций SUM,WHEREBETWEEN и.т.д.
Вот, собственно, сам запрос к модели:
$data = Report_designer::whereBetween('createdtime',['2017-03-01','2017-03-15'])
->count()
->sum('apruv')
->sum('denial')
->sum('handing')
->sum('injob')
->sum('brak')
->groupby('manager')
->get();
Не в сети
посмотри что у тебя генерируется, сделай
dd(Report_designer::whereBetween('createdtime',['2017-03-01','2017-03-15'])
->count()
->sum('apruv')
->sum('denial')
->sum('handing')
->sum('injob')
->sum('brak')
->groupby('manager')->toSql());
попробуй выполнить полученный запрос в базе через phpmyadmin, подумай почему не работает
Не в сети
Да, спасибо, увидел что выражение получается лишенным всякой логики, тогда следовательно вопрос - если я вызываю все поля запросом такого вида:
$data= Report_designer::select('manager','prefics','apruv','denial','handing','injob','brak')->groupby('manager')->get();
как мне применить к ним агрегатные функции, например посчитать поле sum(apruv), если писать это в сыром виде в коде то, фреймворк говорит что либо функция sum() не определена или что поле `sum(apruv)` в таблице не найдено
Не в сети
наверное проще и быстрее написать запрос с DB::connection()
Не в сети
Да, на этом варианте я и остановился, просто хотелось узнать, нельзя ли сделать этот запрос более элегантным. Спасибо. Вот конечный рабочий код:
$data= Report_designer::select(DB::raw('manager,'
. 'prefics,'
. 'count(*) as `leads`,'
. 'SUM(apruv) as `apruv`,'
. 'SUM(denial) as `denial`,'
. 'SUM(handing) as `handing`,'
. 'SUM(injob) as `injob`,'
. 'SUM(brak) as `brak`,'
. 'ROUND((SUM(apruv)/count(*))*100) as `perc`,'
. 'ROUND((SUM(apruv)/(count(*)-SUM(brak)))*100) as `konv`,'
. 'ROUND(SUM(total_sum)/SUM(apruv)) as `avg`,'
. 'ROUND((SUM(paid)/SUM(apruv))*100) as `deliv`,'
. 'ROUND(SUM(total_sum),2) as `total_sum`'))
->whereBetween('createdtime',[$request->dateFrom,$request->dateTo])
->groupby('manager')
->get();
Не в сети
Страницы 1