Как создавать разные псевдонимы, выполняя разные запросы в одном и том же столбце в Laravel 5.7 - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть таблица в MySQL, где я храню индексы, и мне нужно подсчитать столбец индексов, выдав псевдоним для каждого счетчика.

Я попробовал следующий код, но он не работает, и какЯ новичок в Laravel, я не уверен, как я могу построить этот запрос

$data = Baralho::select(
        DB::raw("YEAR(data_entrada) as ano"),
        DB::raw("count(id_situacao) as inseridos, id_situacao"),
        DB::raw("count(id_situacao = 2) as presos"),
        DB::raw("count(id_situacao = 3) as mortos"),
        DB::raw("count(id_situacao = 4) as retirados")
    )->groupBy("ano")->get();
    $geral[] = ['Ano', 'Inseridos', 'Presos', 'Mortos', 'Retirados'];
    //$anos = $data->pluck('ano');
    foreach($data as $key => $value){
        $geral[++$key] = [$value->ano, $value->inseridos, $value->presos, $value->mortos, $value->retirados ];
    }
    dd($geral);

Мне нужно, чтобы он подсчитал индексы и возвратил результат для каждого псевдонима, например, если в столбце id_situacao индекс 2 он подсчитывает все 2 индекса и приносит результат с псевдонимом presos, чтобы я мог вставить эти результаты в мой массив $geral[]

dd ($ geral)Результат

Редактировать:
Я пытался использовать следующий код:

$data = DB::select(
            DB::raw('(SELECT YEAR(data_entrada) as ano FROM baralho)'),
            DB::raw('(SELECT count(id_situacao) as inseridos FROM baralho)'),
            DB::raw('(SELECT count(id_situacao) as presos FROM baralho WHERE id_situacao = 2)'),
            DB::raw('(SELECT count(id_situacao) as mortos FROM baralho WHERE id_situacao = 3)'),
            DB::raw('(SELECT count(id_situacao) as retirados FROM baralho WHERE id_situacao = 4)')
        )->groupBy('ano')->get();;
        $geral[] = ['Ano', 'Inseridos', 'Presos', 'Mortos', 'Retirados'];
        //$anos = $data->pluck('ano');
        //dd($anos);
        foreach($data as $key => $value){
            $geral[++$key] = [$value->ano, $value->inseridos, $value->presos, $value->mortos, $value->retirados];
            //dd($value);
        }
        dd($geral);

, но получил ошибку:

Symfony \ Component \Debug \ Exception \ FatalThrowableError (E_RECOVERABLE_ERROR) Аргумент 1, передаваемый в Illuminate \ Database \ Connection :: prepareBindings (), должен относиться к массиву типов, данный объект вызывается в /home/u185216683/domains/disquedenuncia.com/sysdados/vendor/laravel/ рамки / SRC / Осветите / База данных/Connection.php в строке 328

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Ну, я смог решить мою проблему следующим образом:

$data = Baralho::select(
            DB::raw("YEAR(data_entrada) as ano"),
            DB::raw("count(id_situacao) as inseridos, id_situacao"),
            DB::raw("count(case when id_situacao = 2 then 1 end) as presos"),
            DB::raw("count(case when id_situacao = 3 then 1 end) as mortos"),
            DB::raw("count(case when id_situacao = 4 then 1 end) as retirados")
        )->groupBy("ano")->get();
        $geral[] = ["Ano", "Inseridos", "Presos", "Mortos", "Retirados"];
        foreach($data as $key => $value){
            $geral[++$key] = [$value->ano, $value->inseridos, $value->presos, $value->mortos, $value->retirados ];
        }  

Только с предложением CASE я смог подсчитать поля id_situacao, сгруппировав их по id и вернувпсевдоним для каждого типа

0 голосов
/ 01 февраля 2019

Ваше объяснение было неясным для меня, но я думаю, что понимаю, чего вы хотите.Попробуйте это:

$data = Baralho::select(
    DB::raw("YEAR(data_entrada) as ano"),
    DB::raw("count(id_situacao) as inseridos, id_situacao"),
    DB::raw("count(id_situacao = 2) as presos"),
    DB::raw("count(id_situacao = 3) as mortos"),
    DB::raw("count(id_situacao = 4) as retirados")
)->groupBy("ano")->get();

$geral = [];
//$anos = $data->pluck('ano');
foreach($data as $key => $value){
    $geral[++$key] = ['Ano' => $value->ano, 'Inseridos' => $value->inseridos, 'Presos' => $value->presos, 'Mortos' => $value->mortos, 'Retirados' => $value->retirados ];
}
...