首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法使用与我删除的用户名相同的用户

无法使用与我删除的用户名相同的用户
EN

Stack Overflow用户
提问于 2022-04-30 12:37:27
回答 1查看 302关注 0票数 1

Laravel + MongoDB

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

代码语言:javascript
运行
复制
       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()方法:

代码语言:javascript
运行
复制
    public static function create($parameters)
    {
        return static::query()->create($parameters);
    }

关闭上面代码中的Create()方法:

代码语言:javascript
运行
复制
  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却不能将用户视为数据。

我想要做的是解决这个问题,而不使用强制删除,只使用软删除。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-30 15:07:22

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

你在使用Laravel软删除。

这意味着Laravel将记录保存在数据库中,并在用户表中的deleted_at中放置一个非空值。

因为数据没有从数据库中删除,所以数据库不能创建同名为"X“的新记录,因为该记录"X”已经存在--由于软删除,该记录在Laravel看来刚刚被删除。

如果您希望保护唯一的用户名,这并不是一个问题:它通过防止对所有用户复制username来正确工作,甚至是必须删除的用户。您可能需要保留用户数据,随着时间的推移(因此,软删除),这将成功地防止您复制甚至一个旧的‘删除’用户。如果不需要此保护,请从username中删除唯一字段。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72068601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档