Laravel在一个查询中使用不同的选择

时间:2019-03-06 22:09:55

标签: php mysql laravel eloquent

我将尽力描述我的处境;我在下面有两个单独的查询:

   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 :(得分:0)

您可以执行以下操作,我们在开始处设置了一个空数组,因此,如果函数返回一个空数组,您可以对此进行进一步检查:

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;
}

答案 1 :(得分:0)

因为我没有足够的代表,所以我无法发表评论。

我想我明白你的意思。最简单的方法是将几个选择链接在一起。

类似

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