Как написать запрос на основе условия? - PullRequest
0 голосов
/ 14 декабря 2018

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

Ниже приведен код, который я пишу.Я не хочу повторять ту же строку снова для 9 пользователей.

Как я могу выполнить этот запрос без повторения условия?

if($user_id == 1) {
$slmids = Production::groupBy('gid', 'rid', 'aid', 'sid')
//same
                    ->where("yrsno", $currentYear)
                    ->orderBy("order")
                    ->orderBy("rid")
                    ->orderBy("aid")
                    ->get(['gid', 'rid', 'aid', 'sid'])
                    ->toArray();

}
else if($user_id == 2) {
$slmids = Production::where('gid', $user['sgrp'])
//same
                    ->where("yrsno", $currentYear)
                    ->orderBy("order")
                    ->orderBy("rid")
                    ->orderBy("aid")
                    ->get(['gid', 'rid', 'aid', 'sid'])
                    ->toArray();

}
else if($user_id == 3){
    .....
}

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018
$slmids = Production::where("yrsno", $currentYear);

if ($user_id == 1)
    $slmids = $slimds->groupBy('gid', 'rid', 'aid', 'sid');
elseif ($user_id == 2)
    $slmids = $slmids->where('gid', $user['sgrp']);
...
// you can use switch-case if you want

$slmids = $slmids->orderBy('order')
    ->orderBy('rid')
    ->orderBy('aid')
    ->get(['gid', 'rid', 'aid', 'sid'])
    ->toArray();

Я считаю, что groupBy должен быть размещен первым до orderBy

0 голосов
/ 14 декабря 2018

Используйте When, чтобы упростить. Попробуйте следующий код:

    $production = Production::where("yrsno", $currentYear)
        ->orderBy("order")
        ->orderBy("rid")
        ->orderBy("aid")
        ->query();

    $production->when($user_id == 1, function ($query) {
        $query->groupBy('gid', 'rid', 'aid', 'sid');
    });

    $production->when($user_id == 2, function ($query) use ($user) {
        $query->where('gid', $user['sgrp']);
    });

    $results = $production->get()->toArray();

проверьте еще пример https://stackoverflow.com/a/52333718/8970463

0 голосов
/ 14 декабря 2018
$production = Production::where("yrsno", $currentYear)
                    ->orderBy("order")
                    ->orderBy("rid")
                    ->orderBy("aid")
                    ->get(['gid', 'rid', 'aid', 'sid']);

if ($user_id == 1) {
    $production = $production->groupBy('gid', 'rid', 'aid', 'sid');
} else if($user_id == 2) {
    $production = $production->where('gid', $user['sgrp']);
} else if($user_id == 3) {
    ....
}

$result = $production->toArray();

Вы можете попробовать вот так.

...