You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Artisan Tinker更新数据库数据报错:调用save()时触发字符串错误

解决Laravel Tinker中批量更新模型字段的报错问题

嘿,我来帮你搞定这个报错!咱们先拆解下你代码里的问题根源:

你执行的$admin = App\Admin::get()->name="admin"->save()有两个核心错误:

  1. App\Admin::get()返回的是模型集合(Collection),不是单个Admin模型,你没法直接给集合赋值name属性;
  2. 当你写->name="admin"时,这个表达式的返回值是字符串"admin",接着调用->save()就相当于给字符串调用方法,这自然会触发「Call to a member function save() on string」的错误。

下面给你两种正确的解决方法,按需选择:

方法一:批量更新(推荐,高效)

如果不需要触发模型的updated/saved等生命周期事件,直接用批量更新语句,它只会执行一次SQL,效率拉满:

// 启动tinker后执行这条命令
App\Admin::query()->update(['name' => 'admin']);

方法二:遍历集合逐个更新(触发模型事件)

如果你需要触发模型的观察者逻辑、boot方法里的自定义处理,就遍历集合逐个修改保存:

App\Admin::all()->each(function ($admin) {
    $admin->name = 'admin';
    $admin->save();
});

小补充:App\Admin::get()和App\Admin::all()都返回模型集合,all()其实是get()的快捷调用,内部逻辑是一致的~

内容的提问来源于stack exchange,提问作者Ho Wei Kang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:22:41