0

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))

4

1 に答える 1

0

設定していないようですname。あなたはおそらく次のようなことをします:

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

リクエストがnameないので埋まりません。しかし、name列をnull以外に設定しているため、例外が発生しています

于 2016-10-31T17:15:42.713 に答える