Laravel使用Query Builder执行update失败返回false如何查看错误信息
方法1:捕获数据库异常获取错误详情
你可以用try-catch包裹数据库操作代码,直接捕获查询异常得到具体报错:
try { $new_item = DB::table('peminjams') ->where('id', $dipinjam->id_peminjam) ->update([ 'nama' => $request->nama, 'cp' => $request->cp, 'jaminan' => $request->jaminan ]); } catch (\Illuminate\Database\QueryException $e) { // 直接打印异常信息,包含具体的SQL错误原因 dd($e->getMessage()); }
常见的报错原因包括字段不存在、字段类型不匹配、唯一索引冲突、字段长度超出限制等,都可以通过异常信息直接定位。
方法2:打印执行的SQL和绑定参数验证逻辑
你可以开启查询日志,拿到最终执行的SQL语句和绑定的参数,直接复制到数据库客户端执行,就能看到具体报错:
// 开启查询日志 DB::enableQueryLog(); $new_item = DB::table('peminjams') ->where('id', $dipinjam->id_peminjam) ->update([ 'nama' => $request->nama, 'cp' => $request->cp, 'jaminan' => $request->jaminan ]); // 打印所有执行过的SQL和参数 dd(DB::getQueryLog());
你可以从日志里取出带参数的SQL,直接在数据库中运行排查问题,还可以顺便验证where条件的参数$dipinjam->id_peminjam是否是你预期的值,避免因为条件匹配不到数据的问题。
补充说明
正常情况下Laravel的update方法会返回受影响的行数,如果没有数据被修改(比如提交的字段值和数据库原有值完全一致)会返回0,只有执行出错时才会返回false。如果你的代码没有抛出异常而是直接返回false,可以先检查config/database.php中对应数据库连接的exceptions配置是否被设置为false,开启异常抛出后可以更方便的定位问题。
内容的提问来源于stack exchange,提问作者Roby Cigar
相关产品推荐
相关产品推荐

