Laravel数据库查询中如何编写两个WHERE条件?
Laravel查询:同时添加
name=Python和price IS NULL条件 嘿,这事儿很简单,我给你两种常用的实现方式,顺便解答你关于单个WHERE条件的疑问:
方式一:链式调用多个where方法(最直观)
Laravel的查询构造器支持链式调用,你可以直接在原有查询后面追加whereNull方法(专门用来处理字段为null的情况,会自动生成price IS NULL的正确SQL):
DB::table('contents') ->where('name', 'Python') ->whereNull('price') ->get();
这种方式可读性最高,也是日常开发中最常用的写法。
方式二:单个where方法传递条件数组
如果你想用单个where来包含两个条件,也是可以的,但要注意处理null的正确写法——不能直接写'price' => null(因为SQL里= null是无效的,必须用IS NULL),所以要把条件写成二维数组的形式:
DB::table('contents')->where([ ['name', '=', 'Python'], ['price', 'is', null], ])->get();
这样Laravel会正确解析每个条件,生成WHERE name = 'Python' AND price IS NULL的SQL语句。
注意:别踩这个坑!
如果你尝试这样写:
// 错误写法!不会得到正确结果 DB::table('contents')->where([ 'name' => 'Python', 'price' => null, ])->get();
这段代码会生成WHERE name = 'Python' AND price = null,而SQL中price = null永远不会匹配任何行(因为null和任何值比较都是unknown),所以这种写法是错误的,一定要避免。
总结一下:两种方式都能实现需求,链式调用更易读,数组方式适合条件较多的场景;单个WHERE条件确实可以同时校验两个条件,但要注意null值的正确写法哦!
内容的提问来源于stack exchange,提问作者Code cracker
相关产品推荐
相关产品推荐

