【Laravel】查询构造器---使用orWhere的顺序对查询结果产生的不良影响

时间:2025-05-10 16:35:14

  实现查询:获取模糊匹配中文名 || 英文名等于 “Sara” 并且 个人信息状态为“待审核” 的员工信息。

  其中 $filter = ["eName" => "Sara", "status" => "待审核"];

 ->where(function($q) use($filter){
if(isset($filter['name'])){     $q->where("eName","like","%".$filter['name']."%")
      ->orWhere("cName","like","%".filter['name']."%")
  }
  if(isset($filter['status'])){
    $q->where("status",$filter['status']);
  }
  
})

  上面的调用顺序会导致 $q->where("stauts",$filter['status']);无效。

  正确的书写顺序为将orWhere的调用放在最后,如下:

 ->where(function($q) use($filter){
if(isset($filter['status'])){
    $q->where("status",$filter['status']);
  } if(isset($filter['name'])){
    $q->where("eName","like","%".$filter['name']."%")
      ->orWhere("cName","like","%".filter['name']."%")
  }
     
});

  错误具体产生原因我也没深究,毕竟菜鸡,希望有了解的小伙伴可以在下方留言补充。