You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:42:09