mysql - 使用 for 循环和多个 orWhen 为图表构建数组
问题描述
我正在使用此循环构建一个数组以在图表中显示当前一周中每一天的收视率
$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 个结果。我无法弄清楚为什么会这样?
解决方案
所以我最终想通了,将 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();
}
推荐阅读
- forms - FormData 发送具有三个不同值的相同三个键
- json - Swagger UI:定义额外的 curl 参数
- c++ - Linux utf16 到 c++ 上的 utf8
- c# - 多个用户同时读取密钥时的 web.config 问题
- javascript - 返回一个带有承诺的布尔值
- python - 如何创建包含字典元素列表的嵌套列表?
- android - Google 助理对话操作
- java - 使用 jackson-dataformat-xml 库将属性设置为没有 POJO 的 xml 标签
- javascript - Lodash - 可选的记忆
- android - 按钮单击不起作用,不会将我带到另一个活动