Laravel中如何编写带双重where条件的update语句?
解决Laravel双重WHERE条件更新失效问题
先排查几个核心问题:
检查模型批量赋值权限
确保ContractorsServices模型的$fillable数组包含isPopular字段,否则Laravel的批量赋值保护会拦截更新操作:class ContractorsServices extends Model { protected $fillable = ['serviceID', 'isPopular']; // 必须包含要更新的字段 }验证参数与字段类型匹配
- 先打印
$request->id确认参数值是否正确:dd($request->id);,确保serviceID能匹配到数据库中的记录。 - 若
isPopular是数据库tinyint(1)类型,尝试用数值代替布尔值查询(部分Laravel版本对布尔值的转换存在差异):ContractorsServices::where('serviceID', $request->id) ->where('isPopular', 0) ->update(['isPopular' => 1]);
- 先打印
查看实际执行的SQL语句
开启查询日志,确认生成的SQL是否符合预期:DB::enableQueryLog(); ContractorsServices::where('serviceID',$request->id)->where('isPopular', false)->update(['isPopular' => true]); dd(DB::getQueryLog());通过日志能直观看到WHERE条件是否正确,以及是否有匹配到目标记录。
手动验证SQL有效性
把查询日志里的SQL语句拿到数据库客户端直接执行,确认是否能成功更新。如果数据库中不存在serviceID = 目标值 AND isPopular = false的记录,代码自然不会产生更新效果。
内容的提问来源于stack exchange,提问作者Dias Oralbekov
相关产品推荐
相关产品推荐

