You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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_historique where (sender_id = 32 and description LIKE %salaire%) or (receiver_id = 32 and description LIKE %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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:07:29