为了账号安全,请及时绑定邮箱和手机立即绑定

质量分配 || 如果找到相同的唯一键,我该如何更新数据,如果数据是新的,我该如何创建

质量分配 || 如果找到相同的唯一键,我该如何更新数据,如果数据是新的,我该如何创建

PHP
撒科打诨 2021-12-24 15:56:28
我在数据库中创建了一个名为:staff的表。在该表中,有:id、staffID、staffName、role和password ,其中id字段是自动递增的(它的意思是主键),而人员ID是唯一键。之后,我插入了一些数据。例如:, 69, habie, admin, 123456问题是当我尝试插入新数据时,例如:| , 69, habie, admin, 2010201 | , 70, rafif, 财务, 808080 | , 71, rizieq, 销售, 737373 |我会得到一个错误代码,错误信息是:SQLSTATE [23000]:完整性约束冲突:关键'STAFFID' 1062重复条目'69'(SQL:INSERT INTO staff(staffID, staffName,role,password)值(69,Habie,管理,2010201))我已经尝试了很多步骤来解决这个问题。例如:我使用了: 来自laravel eloquent 类的firstOrCreate方法、firstOrNew方法和updateOrCreate方法。但它没有效果。$this::firstOrCreate([                        "staffID"               =>$staff["PIN2"],                        "staffName"             =>$staff["Name"],                        "role"                  =>$staff["Privilege"],                        "password"              =>$pass                    ]);如果相同的唯一密钥具有新密码等,我只希望我的表得到更新。如果有科研数据,laravel将是新的数据到数据库中。我希望有人可以帮助我。
查看完整描述

2 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

firstOrCreate 可以将两个参数作为数组。第一个数组是搜索记录是否唯一。


尝试:


$this::firstOrCreate([

                        "staffID"               =>$staff["PIN2"]

                     ], [

                        "staffName"             =>$staff["Name"],

                        "role"                  =>$staff["Privilege"],

                        "password"              =>$pass

                    ]);

注意:这个 unser 是真的。但是,如果我们想更新一些数据,我们将使用 updatedOrCreate 方法,该方法的第一个参数是唯一键。多谢兄弟!:D


查看完整回答
反对 回复 2021-12-24
?
莫回无

TA贡献1865条经验 获得超7个赞

首先,您firstOrCreate()以错误的方式使用方法。如果staffID是唯一的,则必须按以下方式使用它。


$starff = $this::firstOrCreate([

       "staffID" =>$staff["PIN2"],

  ], 

  [

      "staffName" =>$staff["Name"],

      "role" =>$staff["Privilege"],

  ]);


// Update password

$staff->password = $pass;

$staff->save();

staffID如果不存在,这将检查冷杉并创建一个新的。然后您可以更新密码或其他详细信息。


查看完整回答
反对 回复 2021-12-24
  • 2 回答
  • 0 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信