Построение массива для диаграммы с l oop и несколькими orWhen - PullRequest
0 голосов
/ 29 мая 2020

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

$ratings = collect([]);
$startOfWeek = Carbon::now()->startOfWeek();        
for ($days_forwards = 0; $days_forwards <= 6; $days_forwards++) {
            $ratings->push(Rating::whereIn('song_id', $userSongs)
                    ->orWhere(function ($query) use ($userAlbums) {
                        $query->whereIn('album_id', $userAlbums);
                    })
                    ->orWhere(function ($query) use ($userArtists) {
                        $query->whereIn('artist_id', $userArtists);
                    })
                    ->whereDate('created_at', $startOfWeek->addDays($days_forwards))
                    ->count());
            $startOfWeek = Carbon::now()->startOfWeek();
        }

Это отлично работает только с первым whereIn, но когда я Добавьте два других фильтра orWhere, и диаграмма выровняется до двух результатов на каждый день. Я не могу понять, почему это происходит?

1 Ответ

0 голосов
/ 01 июня 2020

Итак, я понял это в конце концов, вложив запросы orWhere () внутрь первого where (), вот так:

for ($days_forwards = 0; $days_forwards <= 6; $days_forwards++) {
            $ratings->push(Rating::where(function ($query) use ($userSongs, $userAlbums, $userArtists) {
                        $query->whereIn('song_id', $userSongs)
                        ->orWhere(function ($query) use ($userAlbums) {
                            $query->whereIn('album_id', $userAlbums);
                        })
                        ->orWhere(function ($query) use ($userArtists) {
                            $query->whereIn('artist_id', $userArtists);
                        });
                    })
                    ->whereDate('created_at', $startOfWeek->addDays($days_forwards))
                    ->count());
            $startOfWeek = Carbon::now()->startOfWeek();
        }
...