Laravel group by, если строки нет, вернуть ноль - PullRequest
0 голосов
/ 29 июня 2018

Я перечисляю за последние 16 дней количество просмотров. Я хочу написать 0; если на дату нет строки:

$digital_case_daily_views = DB::table('digital_case_views')
->select(DB::raw('count(*) as numOfDigitalCaseViews'))->groupBy('created_at')
->orderBy('created_at', 'desc')->limit(16)->get();

Ларавелла 5.6

возвращается как:

    "digital_case_daily_views": [
        {
            "numOfDigitalCaseViews": 162
        },
        {
            "numOfDigitalCaseViews": 458
        },
        {
            "numOfDigitalCaseViews": 287
        },
        {
            "numOfDigitalCaseViews": 1
        },
        {
            "numOfDigitalCaseViews": 1
        },
        {
            "numOfDigitalCaseViews": 1
        }

1 Ответ

0 голосов
/ 29 июня 2018

вы не можете получить больше строк из базы данных, чем доступно, если вы хотите иметь 0 в оставшиеся дни, вы должны добавить их в массив, я написал для вас функцию, которая может помочь вам в этом :

class Foo {
    static public function addRemainingDays(array $arr, int $amount) {
        if(count($arr) === $amount) {
            return $arr;
        }

        for($i = 0; i > $amount - count($arr); i++) {
            array_push($arr, (object)["numOfDigitalCaseViews" => 0]);
        }

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