我正在尝试更新现有的用户模型。
$user = \Auth::user();
$user_data_array = ['email' => 'email@domain.com'];
return $user->update($user_data_array);
执行此代码时,返回的值为null
,但模型已按预期成功更新。我深入挖掘了Illuminate\Database\Eloquent\Model.php
并发现update($attributes, $options)
函数调用$this->fill($attributes)->save($options)
。
当我在dd($attributes)
函数内update()
时,$attributes
正确显示为包含电子邮件的数组。但是,当我从dd($attributes)
函数中fill()
时,$attributes
是一个空数组。不知何故,$attributes
似乎在两者之间迷失了。
当我尝试使用save()
函数时,会发生同样的事情。模型已成功更新,但函数返回null
。
有关为何发生这种情况的任何想法?
答案 0 :(得分:3)
我遇到了同样的问题。
<强> TL; DR;检查是否覆盖了save()
方法并确保覆盖方法返回结果parent::save()
在调试save()
方法时,我记录了要返回的值和返回的值。分别为true
和null
......这没有任何意义。 &#34;代码中某处必须覆盖保存方法,忘记返回parent::save()
...&#34;我想,但是找不到它。我花了一段时间才意识到它是用于ACL的包的特征:https://github.com/Zizaco/entrust。 master分支中的代码没问题,但我使用的代码来自1.7.0版。此版本有此问题,已报告并且有一个拉取请求。
我的用户模型
class User extends Authenticatable
{
use Notifiable,
EntrustUserTrait;
}
EntrustUserTrait for release 1.7.0
trait EntrustUserTrait {
...
public function save(array $options = [])
{ //both inserts and updates
parent::save($options);
Cache::tags(Config::get('entrust.role_user_table'))->flush();
}
}
你看到了问题吗?没有return
...因此null
。所以要纠正这个问题,你可以:
public function save(array $options = [])
{ //both inserts and updates
$saved = parent::save($options);
Cache::tags(Config::get('entrust.role_user_table'))->flush();
return $saved;
}
答案 1 :(得分:1)
代码应如下所示:
<?php
$user = Auth::user();
$user->email = "test@test.com";
return $user->save();
?>