Laravel查询:如何按featured_at、ID、sold规则排序商品数据
调整Laravel查询排序以实现预期规则
你的核心问题是当前排序逻辑未区分商品的三类状态优先级,以下是调整后的查询代码:
$items = Item::where('status', 'Active') ->whereNull('deleted_at') ->orderByRaw("CASE WHEN featured_at IS NOT NULL THEN 0 WHEN sold IS NULL THEN 1 ELSE 2 END") ->orderByDesc('featured_at') ->orderByDesc('id') ->orderByDesc('sold') ->paginate(12);
代码说明:
- 优先级分组:通过
orderByRaw中的CASE语句给商品分配排序优先级:- 推荐商品(
featured_at不为NULL)标记为0,排在最前面 - 普通未售出商品(
featured_at为NULL且sold为NULL)标记为1,排在中间 - 售出商品(
sold不为NULL)标记为2,排在最后
- 推荐商品(
- 组内排序:
- 推荐商品组按
featured_at降序排列,保证最新推荐的商品靠前 - 普通未售出商品组按
id降序排列 - 售出商品组按
sold降序排列,最新售出的商品在本组内靠前
- 推荐商品组按
内容的提问来源于stack exchange,提问作者0x9342812j1o
相关产品推荐
相关产品推荐

