Laravel查询:如何结合where与skip实现新闻站文章筛选需求?
解决新闻网站文章分区查询问题
嘿,我来帮你搞定这个查询问题!你的需求很明确:轮播区展示前5条头条,其他文章区要包含所有非头条文章加上头条里跳过前5条的剩余内容——但你之前的查询只处理了头条跳过5条的部分,完全没包含非头条文章,这就是问题所在啦。
下面给你两种可行的解决方案,根据你的使用场景选就行:
方案一:用查询构造器的Union合并查询
这种方式是在数据库层面合并两个查询,性能更优,适合数据量较大的情况:
// 先定义非头条文章的查询 $nonHeadlineQuery = DB::table('articles') ->where('headline', '=', '0'); // 合并头条跳过前5条的查询和非头条查询 $otherArticles = DB::table('articles') ->where('headline', '=', '1') ->skip(5) ->take(15) // 这里可以根据你想展示的数量调整 ->union($nonHeadlineQuery) ->orderBy('created_at', 'desc') // 可选:按发布时间倒序,保证内容有序 ->get();
方案二:Eloquent集合合并(更直观)
如果你用的是Eloquent模型,这种方式代码更易读,适合快速开发:
// 假设你的文章模型是Article // 获取所有非头条文章 $nonHeadlines = Article::where('headline', 0)->get(); // 获取头条中跳过前5条的部分 $remainingHeadlines = Article::where('headline', 1)->skip(5)->take(15)->get(); // 合并两个集合,还可以按需排序 $otherArticles = $nonHeadlines->merge($remainingHeadlines)->sortByDesc('created_at');
另外,别忘了轮播区的正确查询:
$carouselArticles = Article::where('headline', 1)->take(5)->get();
这样就能完美满足你的需求:轮播区拿前5条头条,其他区展示非头条+剩下的头条内容啦!
内容的提问来源于stack exchange,提问作者Crazy Coders
相关产品推荐
相关产品推荐

