Laravel MongoDB
這是我的Store()方法UserController:
public function store()
{
$userData = request()->get('user', []);
.
.
//Checking if credentials satisfied
.
.
try
{
$user = User::create($userData);
}
catch(BulkWriteException $ex)
{
abort(409, trans('errors.EXISTS_USERNAME'));
}
catch(Exception $e)
{
abort(409, trans('errors.EXISTS_USERNAME'));
}
return [
'status' => 'success',
'result' => $user,
];
}
關閉上面代碼中的 Create() 方法:
public static function create($parameters)
{
return static::query()->create($parameters);
}
關閉上面代碼中的 Create() 方法:
public function create(array $attributes = [])
{
return tap($this->newModelInstance($attributes), function ($instance) {
$instance->save();
});
}
所以問題是當我洗掉一個User例子時,username: "X"我無法創建一個新User的username: "X",它給出了你在例外中看到的錯誤。
洗掉方法是軟洗掉,這意味著用戶沒有從 DB 中完全洗掉,它只是提供了 userdeleted_at屬性,所以 laravel 會理解對這個用戶的行為就像一個已洗掉的用戶,這意味著當我使用這樣的查詢時,User::where('username',"X")->get()它不會向我顯示任何結果,這意味著資料被洗掉。
所以這是交易,我不明白為什么它會拋出例外,Existing Username而 laravel 不能將用戶視為資料。
我想要做的是在不使用強制洗掉且僅使用軟洗掉的情況下解決此問題
uj5u.com熱心網友回復:
您注意到您的用戶名是一個唯一欄位。
您正在使用 Laravel 軟洗掉。
這意味著 Laravel 將記錄保存在資料庫中,并deleted_at在用戶表中放置一個非空值。
因為資料沒有從資料庫中洗掉,所以資料庫不能創建一個同名的新記錄“X”,因為那個記錄“X”已經存在——它只是因為軟洗掉而被 Laravel 洗掉了。
如果您想要保護唯一的用戶名,這不是問題:它可以正常作業,因為它可以防止您username對所有用戶重復,即使是您必須洗掉的用戶。您可能需要隨著時間的推移保留用戶資料(因此是軟洗掉),這將成功地防止您復制甚至是舊的“已洗掉”用戶。如果您不想要這種保護,請從username.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/468575.html
標籤:php 拉拉维尔 mongodb 雄辩 laravel-8
