use*_*644 1 laravel eloquent laravel-5.2
我正在尝试更新现有的用户模型。
$user = \Auth::user();
$user_data_array = ['email' => 'email@domain.com'];
return $user->update($user_data_array);
Run Code Online (Sandbox Code Playgroud)
执行此代码时,返回值为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。
关于为什么会发生这种情况的任何想法?
小智 5
我遇到过同样的问题。
TL; 博士; 检查该save()方法是否被覆盖并确保覆盖方法返回结果parent::save()
在调试save()方法时,我记录了要返回的值和返回的值。true和null分别......没有任何意义。“代码中的某个地方一定有人覆盖了保存方法并忘记了返回parent::save()......”我想,但就是找不到它。我花了一段时间才意识到这是一个用于 ACL 的包的特性:https : //github.com/Zizaco/entrust。master 分支中的代码没问题,但我使用的代码来自 1.7.0 版。此版本有此问题,已报告并有拉取请求。
我的用户模型
class User extends Authenticatable
{
use Notifiable,
EntrustUserTrait;
}
Run Code Online (Sandbox Code Playgroud)
1.7.0 版的 EntrustUserTrait
trait EntrustUserTrait {
...
public function save(array $options = [])
{ //both inserts and updates
parent::save($options);
Cache::tags(Config::get('entrust.role_user_table'))->flush();
}
}
Run Code Online (Sandbox Code Playgroud)
你看到问题了吗?没有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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1015 次 |
| 最近记录: |