Laravel 5.3 Observer无法访问模型

时间:2016-10-31 14:35:14

标签: laravel laravel-5 eloquent laravel-5.3 laravel-request

我在Laravel中有一个Eloquent User模型。当我创建一个新用户时,我想为它自动创建一个令牌。我和一个观察者一起做。但是在观察者中,我无法到达创建的模型,它想要创建一个新模型。

我的用户模型:

namespace App;

use App\Observers\UserObserver;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token'
    ];

    public static function boot()
    {
        parent::boot();

        static::observe(UserObserver::class);
    }

}

我的UserObserver

namespace App\Observers;

use App\User;

class UserObserver
{
    public function creating(User $user)
    {
        $user->token = str_random(30);
    }
}

当我创建一个新用户时,我得到一个例外

  

Connection.php第763行中的QueryException:

     

SQLSTATE [23000]:诚信   约束违规:19 NOT NULL约束失败:users.name(SQL:   插入“users”(“token”,“updated_at”,“created_at”)值   (JQYUmmMrRRJT64VcFVA8UzkpY019u6,2016-10-31 14:33:35,2016-10-31   14时33分35秒))

1 个答案:

答案 0 :(得分:0)

看起来你没有设置name。你可能会做这样的事情:

User:create(Request::all());

但请求中没有name,因此无法填写。但是你也将name列设置为非null,因此获得异常