Laravel Eloquent whereIn传入字符串参数查询不生效问题
问题原因
- 变量定义存在语法错误。PHP不支持逗号分隔多值直接赋值给单个变量的写法,你写的
$loc_name1='Kochi','Hydarabad','Buwaneswar';执行后,$loc_name1实际只会被赋值为字符串'Kochi',后面的'Hydarabad'、'Buwaneswar'属于无接收变量的独立表达式,不会被存入该变量。 whereIn传参格式不符合要求。Laravel的whereIn方法第二个参数要求传入一维值数组,你写的[$loc_name1]相当于给变量额外套了一层数组结构,传入的实际是二维数组,和方法要求的参数格式不匹配,无法生成正确的查询条件。
修改方案
- 首先将变量正确定义为一维数组:
如果是手动固定枚举值,直接定义为数组格式即可:
$loc_name1 = ['Kochi','Hydarabad','Buwaneswar'];
如果原始值是逗号拼接的字符串(比如前端传参、文本读取得到的'Kochi,Hydarabad,Buwaneswar'格式字符串),用explode函数拆分为一维数组,可搭配array_filter过滤空值避免异常:
// 假设原始值是逗号拼接的字符串 $loc_name1 = 'Kochi,Hydarabad,Buwaneswar'; $loc_name1 = array_filter(explode(',', $loc_name1));
- 调用
whereIn时直接传入定义好的一维数组变量,不要额外套方括号包裹,修改后的完整查询代码如下:
$employees = DB::table('audit_employee_basics') ->select( 'audit_employee_basics.id as empid', 'emp_name', 'emp_code', 'designation_name', 'emp_company_email_id', 'emp_contact_number', 'emp_gender', 'emp_location', 'department_name', 'emp_joining_date', 'fk_emp_previous_exp', 'image' ) ->join('audit_department', 'audit_employee_basics.emp_fk_dep', '=', 'audit_department.id') ->join('audit_employee_skillset', 'audit_employee_skillset.fk_emp_id', '=', 'audit_employee_basics.id') ->join('audit_designation', 'audit_designation.id', '=', 'audit_employee_basics.emp_fk_des_id') ->whereIn('audit_employee_basics.emp_location', $loc_name1) ->distinct() ->get();
内容的提问来源于stack exchange,提问作者Shanu k k
相关产品推荐
相关产品推荐

