我有一个新闻网站,上面有主页上的帖子概述。简单的雄辩式分页收藏,说实话没什么特别的(model = Post)。 现在,已经添加了一个新模型(视频),应该将其添加到首页上的帖子概述中。
因此,目标是获得大量的帖子和大量的视频(彼此无关),然后将它们合并为一个集合并对其进行分页。
我环顾四周并尝试了一些方法,但是似乎都没有用。
大多数情况下,他们会说使用float f {3.422222222222222222222222222222246454}; // no warning/ error although it should definitely lose precision
float f2 {static_cast<double>(std::numeric_limits<float>::max()) + 1.0}; // no warning/ error
float f3 {3.5e38}; // error: narrowing conversion of '3.5e+38' from 'double' to 'float' inside { } [-Wnarrowing]
,但这是行不通的,因为如果帖子中具有相同的ID,则不会显示ID为1的视频。
另一种选择是定义一个关系,但是由于它们根本不相关,因此也不起作用。
我现在拥有的只是获得帖子:
$collection->merge($otherCollection)
现在我想以类似方式检索视频
if ($highlighted) {
$posts = Post::where([
['status_id', '=', 4],
['published_at', '<=', Carbon::now()],
['id', '!=', $highlighted->id],
])->latest('published_at')->paginate(14);
} else {
$posts = Post::where([
['status_id', '=', 4],
['published_at', '<=', Carbon::now()]
])->latest('published_at')->paginate(15);
}
然后将它们组合成一个雄辩的收藏集,对总数进行分页,而不是单独对视频和帖子进行分页
类似:
$videos = Video::where([
['status_id', '=', 4],
['published_at', '<=', Carbon::now()]
])->latest('published_at')->paginate(15);
,然后$collected = $videos + $posts
(出于这篇文章的篇幅,我没有添加我尝试过的任何示例,并且由于使用->latest('published_at')->paginate(15)
感觉不可行,因此我还需要一个雄辩的集合,则无法使用纯DB查询,除非可以将其转换为Eloquent集合)
也许无法通过雄辩的集合实现,我应该使用查询生成器?
任何反馈/帮助都非常感谢。 (随时询问其他代码/信息)
答案 0 :(得分:1)
您可以发送两个不同的查询,将两个结果合并到Illuminate\Support\Collection
中,然后合并到sortBy('published_at')
中,然后使用skip(($numPage - 1) * $perPage)
和limit($perPage)
进行分页。
让我知道是否有帮助
答案 1 :(得分:0)
由于这里发表了评论和回答,我设法找到了一个可行的解决方案:
为了检索数据,我做了以下操作:
$posts = Post::where([
['status_id', '=', 4],
['published_at', '<=', Carbon::now()]
])->get();
$videos = Video::where([
['status_id', '=', 4],
['published_at', '<=', Carbon::now()]
])->get();
$collected = $videos->union($posts)->sortByDesc('published_at');
如对此问题的评论中所述:https://stackoverflow.com/a/30421846/4666299我使用https://gist.github.com/simonhamp/549e8821946e2c40a617c85d2cf5af5e进行分页。
这样我就可以做到:
$items = (collect($collected))->paginate(15);
现在,我有一个可以在Blade中循环播放的集合。 感谢您的所有帮助!