Laravel 用户更新返回 NULL

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()方法时,我记录了要返回的值和返回的值。truenull分别......没有任何意义。“代码中的某个地方一定有人覆盖了保存方法并忘记了返回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)