Laravel更新语句中如何忽略变量?报错‘Invalid column name '0'’
解决Laravel UPDATE按需更新字段的问题
你原来的写法错误在于把字符串直接塞进了update的数组参数里,PHP会自动给这个字符串分配数字索引0,Laravel误以为要更新名为0的列,所以才报"Invalid column name '0'"的错。正确的做法是用动态数组来管理要更新的字段,具体实现如下:
// 先初始化更新数组,添加必填的Strength字段 $updateData = [ 'Strength' => $select->Strength + $request->str, ]; // 当满足条件时,动态添加Leadership字段到数组 $allowedClasses = [64, 65, 66]; if (in_array($select->Class, $allowedClasses)) { $updateData['Leadership'] = $select->Leadership + $request->com; } // 执行更新 DB::table('Character') ->where('Name', '=', $request->char) ->update($updateData);
额外优化建议
- 建议先判断
$select是否存在,避免因查询不到数据导致的属性调用错误:$select = DB::table('Character')->where('Name', '=', $request->char)->first(); if (!$select) { // 处理查询不到数据的情况,比如返回错误提示 return; } - 用
in_array替代多个OR判断,代码更简洁易维护。
内容的提问来源于stack exchange,提问作者Виктор Минчев
相关产品推荐
相关产品推荐

