You need to enable JavaScript to run this app. Laravel调用delete()删除数据时报Call to a member function delete() on string错误求助
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 16:06:02