2016-10-31 24 views
0

LaravelにEloquent Userモデルがあります。私は新しいユーザーを作成するとき、私はそれのためのトークンを自動的に作成したい。私は観察者とそれをする。しかし、オブザーバーでは、作成されたモデルには到達できません。新しいモデルを作成したいのです。Laravel 5.3オブザーバがモデルに到達できません

マイ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: 「ユーザー」(「トークン」、「updated_at」、「created_at」)値に挿入 (JQYUmmMrRRJT64VcFVA8UzkpY019u6,2016-10-31 14:33:35) 、2016-10-31 14:33:35))

+0

あなたのSQLエラーは* name *の値がないことを意味します。あなたのオブザーバーは "解雇され"、あなたのトークンはJQYUmmMr ...です。だから、名前の値を渡すとユーザーを作成しているところです。 – TheFallen

+0

はい、イベントを発生させたトークン値を追加する代わりに、新しいオブジェクトを作成します。 まずそれは、新しいユーザーの作成:モデルで ::作成(配列(配列( '_トークン' => 'OHggG8VZCFxLSfGelxaHdIOYQSx05M7o16E2QKB2'、 '名前' => '名前を'、 'メール' =>'[email protected] '、' password '=>' 7X194HeFbwl!85 ''、 'password_confirmation' => '7X194HeFbwl!85)')))を入力してください。任意の属性。 – tthlaszlo

+0

このコードで質問を更新してください。 – TheFallen

答えて

0

nameは設定されていないようです。

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

のが、要求にはnameが存在しないので、それが満たされることはありません:あなたは、おそらくこのような何かを。しかし、あなたもnameカラムをnullでないとして設定しているので、例外が発生しています

関連する問題