Laravel用户更新返回NULL

时间:2016-02-22 21:26:02

标签: laravel eloquent laravel-5.2

我正在尝试更新现有的用户模型。

$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

有关为何发生这种情况的任何想法?

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。

<强> TL; DR;检查是否覆盖了save()方法并确保覆盖方法返回结果parent::save()

在调试save()方法时,我记录了要返回的值和返回的值。分别为truenull ......这没有任何意义。 &#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();
?>
相关问题