Laravel разные выборки в одном запросе - PullRequest
0 голосов
/ 07 марта 2019

Я постараюсь описать мою ситуацию;У меня есть два отдельных запроса ниже:

   public function getDriversCount($request) {
      return Driver::count();
   }

и второй:

public function getDriversCountWithStatus($request) {
    return Driver::select('status', DB::raw('count(*) as total'))
                        ->groupBy('status')
                        ->get();
}

Теперь мы можем видеть, что эти два являются двумя отдельными функциями и для отдельных запросов.В первом я считаю все записи таблицы drivers, а во втором я считаю в соответствии с status группами.Итак, как я могу достичь того же результата с помощью одной функции и одного запроса?что-то вроде этого:

{
    "absolute_total": 21,
    "with_status": [
        {
            "status": 0,
            "total": 11
        },
        {
            "status": 1,
            "total": 10
        }
    ]
}

этот я получил вручную, вызвав эти две функции отдельно.

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Я пока не могу комментировать, потому что мне не хватает представителя.

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

Что-то вроде

public function getDriversCountWithStatus($request) {
    return Driver::select('total', DB::raw('count(*) as total'))
        ->addSelect('status', DB::raw('count(*) as total group by status'))
        ->get();
}
0 голосов
/ 07 марта 2019

Вы можете сделать следующее, мы устанавливаем пустой массив в начале, поэтому, если функция возвращает пустой массив, вы можете выполнить дополнительную проверку:

public function getDriversCountAndStatus($request)
{
    // Set the array that will be returned
    $driversCountWithStatus = [];

    // Get the driver count
    $driverCount = Driver::count();

    // Get the driver status
    $driverStatus = Driver::select('status', DB::raw('count(*) as total'))
                    ->groupBy('status')
                    ->get();

    // Combine the driver count and status into one array
    $driversCountWithStatus = [
        "absolute_total" => $driverCount,
        "with_status" => $driverStatus;
    ];

    return $driversCountWithStatus;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...