Laravel 5.5报错:Call to undefined method stdClass::update() 问题求助
解决Laravel 5.5中
Call to undefined method stdClass::update()错误 嘿,这个问题我之前帮好几个开发者排查过,咱们快速理清楚问题根源和解决办法:
错误原因
你当前的代码里,DB::table('adminUserLogs')->...->first()返回的是一个普通的PHP stdClass对象,而不是Laravel Eloquent模型实例。只有Eloquent模型才自带update()方法,普通对象自然没有这个方法,所以才会抛出这个错误。
两种可行的解决方案
方案1:直接用查询构造器完成更新(最简洁高效)
不用先获取对象再调用更新,直接在查询构造器链上执行update()即可,这也是Laravel查询构造器推荐的写法:
DB::table('adminUserLogs') ->where('adminUserId', $id) ->whereNull('adminUserOutTime') // Laravel提供的语法糖,比写NULL更规范 ->update(['adminUserOutTime' => \Carbon\Carbon::now()]);
方案2:使用Eloquent模型操作(适合需要复用模型逻辑的场景)
如果你项目里习惯用Eloquent模型,首先要创建对应的模型类:
namespace App\Models; use Illuminate\Database\Eloquent\Model; class AdminUserLog extends Model { // 如果表名和模型复数命名不一致,需要手动指定 protected $table = 'adminUserLogs'; // 允许批量赋值的字段,确保update()能正常生效 protected $fillable = ['adminUserOutTime']; }
然后用模型查询并更新(记得处理first()可能返回null的情况,避免空指针错误):
$logEntry = App\Models\AdminUserLog::where('adminUserId', $id) ->whereNull('adminUserOutTime') ->first(); if ($logEntry) { $logEntry->update(['adminUserOutTime' => \Carbon\Carbon::now()]); }
小提示
如果只是简单的单条更新操作,优先选方案1,因为它不需要额外创建模型,而且直接在数据库层面执行更新,性能更优。
内容的提问来源于stack exchange,提问作者Niladri Banerjee - Uttarpara
相关产品推荐
相关产品推荐

