为带有for循环和多个orWhen的图表构建数组

时间:2020-05-29 11:41:05

标签: mysql laravel for-loop count

我正在构建一个数组,使用此循环在图表中显示当前一周的每一天的评分

$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过滤器时,该图表每天会展平为2个结果。我不知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

所以我最终弄清楚了,像这样将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();
        }
相关问题