Laravel - 批量赋值 ||如果找到相同的唯一键,我该如何更新数据,如果数据是新的,我该如何创建
Laravel - Mass assignment || How can I do for updating data if found same unique key, and creating if the data are new
我在数据库中创建了一个名为:staff 的 table。
那个table里面有:id、staffID、staffName、角色和密码
其中 id 字段是 autoincrement(它的平均主键),staffID 是 唯一键。
之后,我插入了一些数据。例如:, 69, habie, admin, 123456
问题是当我尝试插入新数据时,例如:
| , 69, habie, 管理员, 2010201 | , 70, rafif, 财务, 808080 | , 71, rizieq, 销售, 737373 |
我会得到一个错误代码,错误信息是:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry
'69' for key 'staffID' (SQL: insert into staff
(staffID
,
staffName
, role
, password
) values (69, Habie, admin, 2010201))
我已经尝试了很多步骤来解决这个问题。例如:
我用过:
firstOrCreate 方法、firstOrNew 方法和 updateOrCreate 方法 laravel eloquent class。但它没有效果。
$this::firstOrCreate([
"staffID" =>$staff["PIN2"],
"staffName" =>$staff["Name"],
"role" =>$staff["Privilege"],
"password" =>$pass
]);
我只希望我的 table 是 获取更新 如果 相同的唯一密钥有一个新密码,等等 。如果有新数据,laravel 插入 新数据到数据库。我希望有人能帮助我。
首先,您使用的 firstOrCreate()
方法有误。如果 staffID
是唯一的,则必须按以下方式使用它。
$starff = $this::firstOrCreate([
"staffID" =>$staff["PIN2"],
],
[
"staffName" =>$staff["Name"],
"role" =>$staff["Privilege"],
]);
// Update password
$staff->password = $pass;
$staff->save();
这将检查 fir staffID
,如果不存在则创建一个新的。然后您可以更新密码或其他详细信息。
firstOrCreate 可以将两个参数作为数组。
第一个数组是搜索记录是唯一的。
尝试:
$this::firstOrCreate([
"staffID" =>$staff["PIN2"]
], [
"staffName" =>$staff["Name"],
"role" =>$staff["Privilege"],
"password" =>$pass
]);
注意:这个猜错了。但是,如果我们想更新一些数据,我们将使用第一个参数是唯一键的 updatedOrCreate 方法。多谢兄弟! :D
我在数据库中创建了一个名为:staff 的 table。
那个table里面有:id、staffID、staffName、角色和密码 其中 id 字段是 autoincrement(它的平均主键),staffID 是 唯一键。
之后,我插入了一些数据。例如:, 69, habie, admin, 123456
问题是当我尝试插入新数据时,例如:
| , 69, habie, 管理员, 2010201 | , 70, rafif, 财务, 808080 | , 71, rizieq, 销售, 737373 |
我会得到一个错误代码,错误信息是:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '69' for key 'staffID' (SQL: insert into
staff
(staffID
,staffName
,role
,password
) values (69, Habie, admin, 2010201))
我已经尝试了很多步骤来解决这个问题。例如:
我用过: firstOrCreate 方法、firstOrNew 方法和 updateOrCreate 方法 laravel eloquent class。但它没有效果。
$this::firstOrCreate([
"staffID" =>$staff["PIN2"],
"staffName" =>$staff["Name"],
"role" =>$staff["Privilege"],
"password" =>$pass
]);
我只希望我的 table 是 获取更新 如果 相同的唯一密钥有一个新密码,等等 。如果有新数据,laravel 插入 新数据到数据库。我希望有人能帮助我。
首先,您使用的 firstOrCreate()
方法有误。如果 staffID
是唯一的,则必须按以下方式使用它。
$starff = $this::firstOrCreate([
"staffID" =>$staff["PIN2"],
],
[
"staffName" =>$staff["Name"],
"role" =>$staff["Privilege"],
]);
// Update password
$staff->password = $pass;
$staff->save();
这将检查 fir staffID
,如果不存在则创建一个新的。然后您可以更新密码或其他详细信息。
firstOrCreate 可以将两个参数作为数组。 第一个数组是搜索记录是唯一的。
尝试:
$this::firstOrCreate([
"staffID" =>$staff["PIN2"]
], [
"staffName" =>$staff["Name"],
"role" =>$staff["Privilege"],
"password" =>$pass
]);
注意:这个猜错了。但是,如果我们想更新一些数据,我们将使用第一个参数是唯一键的 updatedOrCreate 方法。多谢兄弟! :D