Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 16.03.2017 11:16:11

Конструктор запросов

Доброго времени суток
Возникли проблемы с использованием конструктора запросов, а конкретнее появились несколько вопросов:
- как использовать в конструкторе хранимые процедуры/функции?
- как использовать в конструкторе сложные операторы типа 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();

Не в сети

#2 16.03.2017 14:14:33

Re: Конструктор запросов

посмотри что у тебя генерируется, сделай
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, подумай почему не работает

Не в сети

#3 16.03.2017 16:57:14

Re: Конструктор запросов

Да, спасибо, увидел что выражение получается лишенным всякой логики, тогда следовательно вопрос - если я вызываю все поля запросом такого вида:

$data= Report_designer::select('manager','prefics','apruv','denial','handing','injob','brak')->groupby('manager')->get();

как мне применить к ним агрегатные функции, например посчитать поле sum(apruv), если писать это в сыром виде в коде то, фреймворк говорит что либо функция sum() не определена или что поле `sum(apruv)` в таблице не найдено

Не в сети

#4 17.03.2017 11:17:39

Re: Конструктор запросов

наверное проще и быстрее написать запрос с DB::connection()

Не в сети

#5 17.03.2017 16:54:34

Re: Конструктор запросов

Да, на этом варианте я и остановился, просто хотелось узнать, нельзя ли сделать этот запрос более элегантным. Спасибо. Вот конечный  рабочий код:
$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();

Не в сети

Подвал раздела