Laravel SQL запрос .. если условие в Где

Я только начал изучать Laravel и преобразовывать обычный код PHP в Laravel.
Мне нужно выполнить этот запрос в Laravel, но не удалось.

SELECT sum(qty_del) as delivery from delivery_sap a where YEAR(a.bill_date) + IF(MONTH(a.bill_date)>6, 1, 0) = 2017

Это то, что я придумал, но это не удалось.

$data = DB::table('delivery_sap')
->select(DB::raw('sum(qty_del) as delivery'))
->whereRaw('YEAR(a.bill_date) + IF(MONTH(a.bill_date)>6, 1, 0) = 2017');

Исправленный запрос, основанный на ответе ниже

$data = DB::table('delivery_sap')
->select(DB::raw('sum(qty_del) as delivery'))
->whereRaw('YEAR(bill_date) + IF(MONTH(bill_date)>6, 1, 0) = 2017')
->first();

изменился с get () на первый, так как я хотел, чтобы он возвращался как одна строка

1

Решение

Вы можете вывести сгенерированный запрос создателем запроса и сравнить его с исходным запросом:

use Illuminate\Support\Facades\DB;

$query = DB::table('delivery_sap')
->select(DB::raw('sum(qty_del) as delivery'))
->whereRaw('YEAR(a.bill_date) + IF(MONTH(a.bill_date)>6, 1, 0) = 2017');

dd($query->toSql());

Возвращает:

"select sum(qty_del) as delivery from `delivery_sap` where YEAR(a.bill_date) + IF(MONTH(a.bill_date)>6, 1, 0) = 2017"

Который почти идентичен вашему исходному запросу. Вам нужно связать звонки с финалом get() чтобы получить результаты:

$data = DB::table('delivery_sap AS a')
->select(DB::raw('sum(qty_del) as delivery'))
->whereRaw('YEAR(a.bill_date) + IF(MONTH(a.bill_date)>6, 1, 0) = 2017')
->get(); // <= Here
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]