我在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秒))
答案 0 :(得分:0)
看起来你没有设置name
。你可能会做这样的事情:
User:create(Request::all());
但请求中没有name
,因此无法填写。但是你也将name
列设置为非null,因此获得异常