【问题标题】:Create new user in database but keep password if it exists in Laravel在数据库中创建新用户,但如果 Laravel 中存在密码,则保留密码
【发布时间】:2021-03-27 01:26:43
【问题描述】:

我想知道 Laravel 中的 updateOrCreate 方法是否可以跳过一些信息,以防数据库中存在记录。例如,我希望能够搜索用户,并在要创建用户时分配密码,但如果用户已经存在则不能。

假设我有 3 个用户数据,$email、$info 和 $password。搜索条件当然是 $email,然后可能出于任何原因需要更新 $info,而 $password 只有在记录是新记录时才应提供。

updateOrCreate 是否有一个“不更新”参数,我可以在其中放置密码?

User::updateOrCreate(
    [
        'email'    => $email  // These parameters are the search criteria, but also used on create
    ],
    [
        'data'     => $info,  // These parameters are the values that will be updated if exist
    ],
    [
        'password' => $password, // These parameters are used only in create but are not search criteria
    ]
);

【问题讨论】:

  • 不,updateOrCreate 实际上只是在后台使用firstOrNew 然后fill。密码是随机生成的吗?
  • 在创建和更新中拆分它并首先测试条件。 users 表是一个特例。不要制造漏洞。我猜您必须有 2 个“用户”表,因为这是您描述的场景的唯一可能性。
  • 不,对于公司的新用户,我们第一次使用文档编号,然后他们在登录系统时要求更改它。因此,如果我使用该字段的更新,他们将丢失他们提供的密码
  • 第一次登录是否也更改了用户名或设置了用户名(doc nr)?也许看看'upsert'laravel.com/docs/8.x/queries#upserts 如果doc nr 是纯整数,也许你可以将它用作users 表的id。可能有点不合常规,但有一条信息你肯定已经知道了。
  • 您可以宏化您自己的 updateOrCreate 类型方法来满足您的需求

标签: laravel eloquent updates


【解决方案1】:

为了全面了解贵组织的流程,我很想问很多问题。 1.如果没有创建用户,信息是如何到达数据库的? 2. 为什么一开始创建信息到数据库时无法生成密码 但我想所有这些都可能归结为设计问题,所以我认为您可以创建一个与您的组织文档编号模式匹配的正则表达式,并使用它通过循环检查新用户并将密码分配给这些用户。

【讨论】:

    猜你喜欢
    • 2020-08-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2020-08-04
    • 2020-04-14
    • 2016-03-05
    • 1970-01-01
    相关资源
    最近更新 更多