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

Laravel查询如何筛选rating为1、3、5等任意组合的全部记录

实现方案

使用Laravel查询构造器自带的whereIn方法即可实现需求,该方法会生成SQL的IN查询条件,全程仅触发1次数据库请求,所有过滤逻辑在数据库层面完成,性能符合要求。
具体实现步骤:

  • 先将前端传入的逗号分隔的rating字符串切割为数组,可搭配过滤逻辑剔除非法值,避免无效查询
  • 替换原有的where方法为whereIn,传入处理好的数组即可

完整代码示例(带输入校验)

// 处理输入参数,转成整型数组并过滤1-5以外的非法值
$ratingArr = array_filter(
    array_map('intval', explode(',', $data['rating'])),
    fn($val) => $val >= 1 && $val <= 5
);

$reviews = Review::query()
    // 只有当过滤数组不为空时才加查询条件,避免空IN条件报错
    ->when(!empty($ratingArr), function($query) use ($ratingArr) {
        $query->whereIn('rating', $ratingArr);
    })
    // 原有其他查询逻辑、排序逻辑可以直接往后拼接
    ->get();

简化写法(不需要输入校验时可直接用)

$reviews = Review::query()
    ->whereIn('rating', explode(',', $data['rating']))
    ->get();

whereIn 底层生成的SQL语句形如 SELECT * FROM reviews WHERE rating IN (1,3,5),和单条件查询性能几乎一致,不需要拆分多次查询也不需要服务端二次过滤结果。


内容的提问来源于stack exchange,提问作者Sergey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:18:03