當使用內置的 Laravel 7 功能創建用戶時,我boot()在我的 User 模型上調用該方法,以便為新用戶分配 UUID。我遇到的問題是,由于某種原因,啟動方法 get 總共調用了 4 次,導致在 S3 上創建了 4 個不同的目錄。應用程序/用戶.php/** * Create the user when this class is called * * @return void */protected static function boot(){ // Setup parent parent::boot(); // Create UUID $uuid = Str::uuid(); // Create user directory on S3 Storage::disk('s3')->makeDirectory('users/' . $uuid); // Assign UUID to new user self::creating(function ($model) use ($uuid) { $model->id = $uuid; });}這是在創建時向用戶添加字段的正確方法嗎?我嘗試使用該RegisterController.php -> create()方法添加它,但它不會向用戶添加任何內容,并導致錯誤提示 ID 需要默認值。
1 回答

慕容森
TA貢獻1853條經驗 獲得超18個贊
每當要創建對象時都會調用 boot 方法(不僅僅是持久化,這creating將是做什么的)。每當 Laravel 使用 Auth 函數時,都會發生這種情況,例如,獲取當前用戶,因此需要多次調用來引導。
parent::boot()您應該將所有內容放在創建閉包內的引導中(除了調用):
protected static function boot()
{
// Setup parent
parent::boot();
self::creating(function ($model) {
// Create UUID
$uuid = Str::uuid();
// Create user directory on S3
Storage::disk('s3')->makeDirectory('users/' . $uuid);
$model->id = $uuid;
});
}
不再需要use ($uuid)on 功能。
- 1 回答
- 0 關注
- 85 瀏覽
添加回答
舉報
0/150
提交
取消