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里面有:idstaffIDstaffName角色密码 其中 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