使用Artisan Tinker更新数据库数据报错:调用save()时触发字符串错误
解决Laravel Tinker中批量更新模型字段的报错问题
嘿,我来帮你搞定这个报错!咱们先拆解下你代码里的问题根源:
你执行的$admin = App\Admin::get()->name="admin"->save()有两个核心错误:
App\Admin::get()返回的是模型集合(Collection),不是单个Admin模型,你没法直接给集合赋值name属性;- 当你写
->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
相关产品推荐
相关产品推荐

