我有一个自定义AppUserProvider
来从像这样的缓存设置中获取用户:
class AppUserProvider extends \Illuminate\Auth\EloquentUserProvider {
public function retrieveById($identifier)
{
return \App\Models\User::getById($identifier);
}
}
然后我在使用Eloquent检索对象后在getById
方法中为其设置了一个自定义属性并将其返回。
$user->test = 'test';
一切正常,但当我点击退出时出现错误。
update `users` set `test` = ?, `remember_token` = ?, `updated_at` = ? where `id` = ?')
不确定为什么要尝试更新test
参数。
答案 0 :(得分:1)
每次在Eloquent模型上设置一个实际上不存在的属性(未在类中定义)时,将调用__set()
,并且Laravel将该值存储为模型属性。然后,当运行更新时,Laravel会注意到您添加了一个新属性并将其添加到更新查询中。
您可以通过在模型中定义属性来阻止这种情况:
public $test;
或者,如果您想像对象一样使用所述属性,则应将其初始化为:
public $permissions;
public function __construct(array $attributes = array()){
$this->permissions = new stdClass;
parent::__construct($attributes);
}