【发布时间】: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 类型方法来满足您的需求