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

我在数据库中创建了一个名为: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将是新的数据到数据库中。我希望有人可以帮助我。


撒科打诨
浏览 150回答 2
2回答

PIPIONE

firstOrCreate 可以将两个参数作为数组。第一个数组是搜索记录是否唯一。尝试:$this::firstOrCreate([                        "staffID"               =>$staff["PIN2"]                     ], [                        "staffName"             =>$staff["Name"],                        "role"                  =>$staff["Privilege"],                        "password"              =>$pass                    ]);注意:这个 unser 是真的。但是,如果我们想更新一些数据,我们将使用 updatedOrCreate 方法,该方法的第一个参数是唯一键。多谢兄弟!:D

莫回无

首先,您firstOrCreate()以错误的方式使用方法。如果staffID是唯一的,则必须按以下方式使用它。$starff = $this::firstOrCreate([       "staffID" =>$staff["PIN2"],  ],   [      "staffName" =>$staff["Name"],      "role" =>$staff["Privilege"],  ]);// Update password$staff->password = $pass;$staff->save();staffID如果不存在,这将检查冷杉并创建一个新的。然后您可以更新密码或其他详细信息。
打开App,查看更多内容
随时随地看视频慕课网APP