我正在构建一个数组,使用此循环在图表中显示当前一周的每一天的评分
$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个结果。我不知道为什么会这样?
答案 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();
}