Laravel5.6 WHERE与OR WHERE中LIKE查询报错及正确SQL需求
解决Laravel查询中Column not found: Unknown column '0'的错误
你遇到的问题根源在于错误使用了where方法的参数格式——Laravel的where方法每次只能处理单个条件,你把多个字段条件(receiver_id、description)塞到同一个where调用里,导致框架错误解析参数,把多余的参数当成了新的条件键值对,才生成了0 = %salaire%这种完全不符合预期的SQL语句。
要实现你想要的SQL逻辑,需要把两个条件组分别用闭包包裹,确保每个where只处理单个字段条件,正确的代码如下:
$description = $request->get('description'); $description_query = Transcationhistorique::where(function ($query) use ($description, $user_id) { // 第一个条件组:发送者是当前用户,且描述包含关键词 $query->where('sender_id', $user_id) ->where('description', 'LIKE', '%' . $description . '%') // 第二个条件组:接收者是当前用户,且描述包含关键词,用orWhere+闭包实现分组 ->orWhere(function ($subQuery) use ($description, $user_id) { $subQuery->where('receiver_id', $user_id) ->where('description', 'LIKE', '%' . $description . '%'); }); })->get();
这段代码会生成你期望的SQL:
select * from
transcation_historiquewhere (sender_id= 32 anddescriptionLIKE %salaire%) or (receiver_id= 32 anddescriptionLIKE %salaire%)
如果你的Laravel版本在8.0及以上,还可以用whereLike方法简化代码,让逻辑更清晰且不易出错:
$description = $request->get('description'); $description_query = Transcationhistorique::where(function ($query) use ($description, $user_id) { $query->where('sender_id', $user_id) ->whereLike('description', "%{$description}%") ->orWhere(function ($subQuery) use ($description, $user_id) { $subQuery->where('receiver_id', $user_id) ->whereLike('description', "%{$description}%"); }); })->get();
内容的提问来源于stack exchange,提问作者Ahmed Guesmi
相关产品推荐
相关产品推荐

