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"
)时,我不能用username: "X"
创建一个新的User
,它会给出异常中所看到的错误。
删除方法是软删除,这意味着用户没有从DB中完全删除,它只是赋予用户deleted_at
属性,因此laravel会理解这一点,就像被删除的用户一样,这意味着当我使用像User::where('username',"X")->get()
这样的查询时,它不会向我显示任何结果,这意味着数据被删除了。
因此,我不明白为什么它会给我带来关于Existing Username
的例外,而laravel却不能将用户视为数据。
我想要做的是解决这个问题,而不使用强制删除,只使用软删除。
发布于 2022-04-30 15:07:22
您注意到您的用户名是一个唯一的字段。
你在使用Laravel软删除。
这意味着Laravel将记录保存在数据库中,并在用户表中的deleted_at
中放置一个非空值。
因为数据没有从数据库中删除,所以数据库不能创建同名为"X“的新记录,因为该记录"X”已经存在--由于软删除,该记录在Laravel看来刚刚被删除。
如果您希望保护唯一的用户名,这并不是一个问题:它通过防止对所有用户复制username
来正确工作,甚至是必须删除的用户。您可能需要保留用户数据,随着时间的推移(因此,软删除),这将成功地防止您复制甚至一个旧的‘删除’用户。如果不需要此保护,请从username
中删除唯一字段。
https://stackoverflow.com/questions/72068601
复制相似问题