Laravel调用delete()删除数据时报Call to a member function delete() on string错误求助
错误产生原因
- 你对
DB::table('restaurant_user')->where('restaurant_id', $id)->first()的返回结果调用了json_encode()方法,该方法会把查询到的stdClass对象转为JSON字符串,所以你拿到的$restid本质是字符串类型,后续遍历得到的$item也都是字符串,自然无法调用delete()方法,这是报错的直接原因。 - 即使你没有做
json_encode()转换,DB::table()查询构造器返回的结果是stdClass普通对象,不是Eloquent模型实例,本身也没有delete()方法,直接调用依然会报错。 - 你调用了
first()方法只会返回单条匹配记录,后续写foreach遍历属于冗余操作,没有必要。
解决方法
推荐直接使用查询构造器删除,不需要先查询再删除,性能更高写法更简洁:
// 直接删除符合restaurant_id条件的所有记录,返回被删除的行数 $deletedNum = DB::table('restaurant_user')->where('restaurant_id', $id)->delete(); if ($deletedNum > 0) { // 你的删除成功逻辑 } else { return redirect()->route('admin.restaurants')->with(['message' => 'Algo salio mal en Restaurant_User']); }
如果你需要先确认记录存在再执行删除,可以调整为如下写法:
$hasRecord = DB::table('restaurant_user')->where('restaurant_id', $id)->exists(); if ($hasRecord) { DB::table('restaurant_user')->where('restaurant_id', $id)->delete(); } else { return redirect()->route('admin.restaurants')->with(['message' => 'Algo salio mal en Restaurant_User']); }
如果你已经创建了RestaurantUser Eloquent模型,也可以用模型操作删除:
// 单条记录删除 $restUser = RestaurantUser::where('restaurant_id', $id)->first(); if ($restUser) { $restUser->delete(); } // 批量删除符合条件的记录,不需要先查询 // RestaurantUser::where('restaurant_id', $id)->delete();
内容的提问来源于stack exchange,提问作者Eduardo Rafael
相关产品推荐
相关产品推荐

