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))
あなたのSQLエラーは* name *の値がないことを意味します。あなたのオブザーバーは "解雇され"、あなたのトークンはJQYUmmMr ...です。だから、名前の値を渡すとユーザーを作成しているところです。 – TheFallen
はい、イベントを発生させたトークン値を追加する代わりに、新しいオブジェクトを作成します。 まずそれは、新しいユーザーの作成:モデルで ::作成(配列(配列( '_トークン' => 'OHggG8VZCFxLSfGelxaHdIOYQSx05M7o16E2QKB2'、 '名前' => '名前を'、 'メール' =>'[email protected] '、' password '=>' 7X194HeFbwl!85 ''、 'password_confirmation' => '7X194HeFbwl!85)')))を入力してください。任意の属性。 – tthlaszlo
このコードで質問を更新してください。 – TheFallen