2016-01-20 4 views
0

Ниже я вставил запрос mysql. Пожалуйста, помогите мне, чтобы преобразовать этот запрос в Laravel 5.Как преобразовать mysql-запрос в laravel 5?

select 
t.username, 
sum(case when t.status_id = 1 then t.count else 0 end) as status_1, 
sum(case when t.status_id = 0 then t.count else 0 end) as status_0, 
sum(case when t.status_id = 0 and t.status_desc = 2 then t.count else 0 end) 
     as status_0_2, 
sum(case when t.status_id = 0 and t.status_desc = 3 then t.count else 0 end) 
as status_0_3 
from (
select username, status_id, status_desc, count(status_desc) as count 
from log 
group by username, status_id, status_desc 
) as t 
group by t.username; 
+0

Почему вы хотите конвертировать его в схему Laravel? Просто создайте представление и запросите его с помощью Eloquent ... –

+0

Для моего проекта я работаю в laravel, и у меня есть решение в mysql, но я не имел никакого представления об использовании case в laravel. поэтому. \ –

+0

Хорошо, тогда имеет смысл. Удачи вам в конвертации! Я считаю, что данный ответ делает то, что вам нужно, вы пробовали? –

ответ

1

Вот как вы могли бы написать это (вы можете проверить этот код, однако).

Что-то отметить об использовании DB::raw:

DB :: сырец() используется для создания произвольных команд SQL, которые не разобранные дальше от конструктора запросов. Поэтому они могут создать вектор для атаки через SQL-инъекцию.

Учитывая это, я использую их здесь, предполагая, что вы не передаете им какой-либо пользовательский ввод, чтобы выполнять параметры подсчета и условного запроса.

Для получения дополнительной информации о том, как работает построитель запросов, обратитесь к Laravel Documentation. Большинство людей не всегда будут достаточно любезны, чтобы писать ваши запросы для вас.

// compile the sql for the select query 
$selectRaw = \DB::table('log')->select([ 
    'username', 
    'status_id', 
    'status_desc', 
    \DB::raw('count(status_desc) as count') 
])->groupBy('username', 'status_id', 'status_desc')->toSql(); 

// create and execute the full query 
$result = \DB::table(\DB::raw("({$selectRaw}) as t"))->select([ 
    't.username', 
    \DB::raw('sum(case when t.status_id = 1 then t.count else 0 end) as status_1'), 
    \DB::raw('sum(case when t.status_id = 0 then t.count else 0 end) as status_0'), 
    \DB::raw('sum(case when t.status_id = 0 and t.status_desc = 2 then t.count else 0 end) as status_0_2'), 
    \DB::raw('sum(case when t.status_id = 0 and t.status_desc = 3 then t.count else 0 end) as status_0_3'), 
])->groupBy('t.username')->get(); 
Смежные вопросы