如何修正Laravel查询以精确匹配指定category_id且满足active=1?
Laravel查询优化:精确匹配指定category_id并满足active=1
你的原查询代码其实已经实现了需求——精确匹配category_id为223、15、20且active=1的记录。不过可以根据数据库中category_id的字段类型做细节优化,避免隐式类型转换可能带来的潜在问题:
- 如果
category_id是整数类型(如数据库字段为int/bigint),将数组中的字符串值改为整数,匹配更精准:
Products::whereIn('category_id', [223, 15, 20]) ->where('active', 1) ->get();
- 若要进一步强制严格匹配(比如避免MySQL自动类型转换导致的意外匹配),可以使用
whereRaw直接编写原生SQL条件:
Products::whereRaw('category_id IN (223, 15, 20) AND active = 1') ->get();
本质上,whereIn方法本身就是用于精确匹配字段值在指定集合中的记录,配合where('active', 1)就能同时满足两个条件,原代码逻辑是完全正确的,上述优化只是针对数据类型的严谨性调整。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

