Laravel双关键词列查询方法及Eloquent查询结果异常排查
Laravel 查询问题解决方案
问题分析
你当前的Eloquent查询写法存在错误,导致无法正确获取符合条件的记录:
Model::where([ 'user_id' => Auth::id(), 'status' => ['New', 'In Progress'] ])->get();
在Laravel的where关联数组语法中,数组形式的条件会被当作精确匹配数组类型字段,而非你需要的“匹配数组中任意一个值”的IN查询,因此只会返回极少数(甚至没有)符合预期的记录。
正确写法(匹配两个状态中的任意一个)
如果需求是查询status为New或In Progress的记录,使用whereIn方法实现IN查询:
Model::where('user_id', Auth::id()) ->whereIn('status', ['New', 'In Progress']) ->get();
正确写法(字段同时包含两个关键词)
如果需求是查询status字段同时包含两个关键词(比如字段值是包含多个状态描述的字符串),使用多条件like查询:
// 链式写法 Model::where('user_id', Auth::id()) ->where('status', 'like', '%New%') ->where('status', 'like', '%In Progress%') ->get(); // 或者使用whereRaw简化 Model::where('user_id', Auth::id()) ->whereRaw('status LIKE ? AND status LIKE ?', ['%New%', '%In Progress%']) ->get();
内容的提问来源于stack exchange,提问作者Hamid Raza
相关产品推荐
相关产品推荐

