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