无法使用我删除的相同用户名创建用户

Not able to make a User with the same username that I deleted

Laravel + MongoDB

这是我在 UserController 中的 Store() 方法:


       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();
        });
    }

所以问题是当我用 username: "X" 删除一个 User 时,我无法用 username: "X" 创建一个新的 User 并且它给出了错误 u见异常。

删除方法是软删除,这意味着用户没有完全从数据库中删除它只是给用户 deleted_at 属性 所以 laravel 会理解对这个用户的行为就像一个已删除的用户,这意味着当我使用 User::where('username',"X")->get() 之类的查询时,它不会显示任何结果,这意味着数据已被删除。

事情就是这样,我不明白为什么它抛出关于 Existing Username 的异常而 laravel 无法将用户视为数据。

我想做的是在不使用强制删除而只使用软删除的情况下解决这个问题

您注意到您的用户名是一个唯一字段。

您正在使用 Laravel soft-deletes。

这意味着 Laravel 将记录保存在数据库中,并在您的用户 table.

中的 deleted_at 中放置一个 non-null 值

因为数据没有从数据库中删除,所以数据库无法创建同名“X”的新记录,因为那个记录“X”已经存在--由于软删除,它似乎已删除 Laravel。

如果您想要保护唯一的用户名,这不是问题:它可以正常工作,防止您针对所有用户复制 username曾经,甚至那些你不得不删除的。您可能需要随着时间的推移保留用户数据(因此 soft-delete),这将成功地防止您复制甚至是旧的 'removed' 用户。如果您不需要此保护,请从 username.

中删除唯一字段