登录
首页 >  文章 >  php教程

LaravelselectRaw多条件筛选方法

时间:2026-01-03 12:39:42 155浏览 收藏

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《Laravel selectRaw 多条件筛选技巧》,聊聊,我们一起来看看吧!

如何在 Laravel 的 selectRaw 查询中正确实现多值条件筛选

本文详解如何在 Laravel 中使用 `selectRaw` 时,对同一字段(如 `category_id`)进行多个值的匹配,指出 `WHERE category_id = 1 AND category_id = 2` 在逻辑上不可能成立,并推荐使用 `whereIn()` 实现“或”语义的多值查询。

在 Laravel 的查询构建器中,::selectRaw() 是执行自定义 SQL 字段选择的常用方式,但它本身不改变 where 子句的语义逻辑。你当前的写法:

->where('category_id', '=', 1)
->where('category_id', '=', 2)

等价于 SQL 中的 WHERE category_id = 1 AND category_id = 2 —— 这永远返回空结果,因为单行记录的 category_id 不可能同时等于两个不同整数值。

✅ 正确做法是使用 whereIn() 方法,它对应 SQL 的 IN 子句,语义为“匹配任意一个值”,即 WHERE category_id IN (1, 2):

$query = self::selectRaw(is_array($fields) ? implode(', ', $fields) : $fields)
    ->whereIn('category_id', [1, 2])
    ->where(function ($q) use ($search) {
        if ($search) {
            $q->where('group_name', $search); // 推荐显式写法,避免数组语法歧义
        }
    });

⚠️ 注意事项:

  • whereIn() 是标准且安全的解决方案,支持数组动态传参(如 $ids = [1, 2, 5]),也兼容空数组(此时会生成 WHERE 1=0,合理短路);
  • 避免误用 where() 连续调用同字段——除非你本意是链式 AND 条件(如 status = 1 AND deleted_at IS NULL),否则对同一字段多值匹配必须用 whereIn、orWhereIn 或 whereBetween 等语义明确的方法;
  • 若需实现“同时属于多个分类”这类高级逻辑(例如某商品关联多个 category),则属多对多关系查询,需通过中间表 JOIN + GROUP BY + HAVING COUNT 实现,而非单表 WHERE。

总结:WHERE column = A AND column = B 永假;应根据业务意图选择 whereIn()(任一匹配)、whereExists()(关联存在性)或聚合查询(全量满足)。在 selectRaw 场景下,语法与普通查询构建器完全一致,无需额外适配。

到这里,我们也就讲完了《LaravelselectRaw多条件筛选方法》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>