Вот как вы могли бы написать это (вы можете проверить этот код, однако).
Что-то отметить об использовании 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();
Почему вы хотите конвертировать его в схему Laravel? Просто создайте представление и запросите его с помощью Eloquent ... –
Для моего проекта я работаю в laravel, и у меня есть решение в mysql, но я не имел никакого представления об использовании case в laravel. поэтому. \ –
Хорошо, тогда имеет смысл. Удачи вам в конвертации! Я считаю, что данный ответ делает то, что вам нужно, вы пробовали? –