Laravel query builder

Рейтинг: 0Ответов: 1Опубликовано: 22.04.2015

Есть билдер запроса:

DB::table(DB::raw('first_table ft'))
->join(DB::raw('second_table st'), 'st.id', '=', 'ft.second_id')
->get([
    'ft.id',
    'IF(st.condition IS NULL,0,1) as is_cond',
]);

Который выдает ошибку SQL:

SQLSTATE[HY000]: General error: 4104 General SQL Server error: Check messages from the SQL Server [4104]

Из-за того, что полученный запрос выглядит следующим образом:

SELECT [ft].[id], [IF(st].[condition] AS [NULL,0,1)] ...

Как можно вставить подобное условие в билдер?

Ответы

▲ 1

Оберните это условие в Illuminate\Database\Query\Expression:

use Illuminate\Database\Query\Expression;

// ...

DB::table(DB::raw('first_table ft'))
->join(DB::raw('second_table st'), 'st.id', '=', 'ft.second_id')
->get([
    'ft.id',
    new Expression('IF(st.condition IS NULL,0,1) as is_cond'),
]);

судя по бектрейсу через гитхаб - должно сработать.