php - 使用 updateOrCreate() 时出现重复条目
问题描述
我正在使用(最新的)流明,这可能是我错误的罪魁祸首。
当我使用 updateOrCreate() 时:
User::updateOrCreate(
['username' => $user->username],
[
'email' => $user->email,
'password' => $user->password,
'foreign_id' => $user->foreign_id,
'client_id' => $user->client_id,
'status' => $user->active,
'user_level' => (integer) $user->user_level
]
);
在我的一个模型上,我得到 mysql 错误:
"SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'user@name.com' for key 'users_username_unique' (SQL: insert into `users` (`username`,
因为它试图为我的唯一列之一(用户名)插入重复值。
所以,函数本身存在,我没有得到任何错误,它适用于第一次插入,但是一旦它达到检查数据库条目是否存在并且只需要更新它的功能,它仍然想要创建新条目,但具有重复值。
Laravel 本身的 Eloquent 中有 updateOrCreate(): https://laravel.com/docs/8.x/eloquent#upserts。Lumen 中的 Eloquent 是否在某种程度上削弱了这个功能?
在查看 Laravel 或 Lumen 的代码时,我找不到这个函数的实现,最接近的是 updateOrFail()...
解决方案
User::updateOrCreate(
[
'username' => $user->username,
'foreign_id' => $user->foreign_id
],
[
'email' => $user->email,
'password' => $user->password,
'client_id' => $user->client_id,
'status' => $user->active,
'user_level' => (integer) $user->user_level
])
// 第一个数组必须包含所有主键/复合键,这使其成为唯一记录
推荐阅读
- c - 无法使用 libtirpc 构建 RPC 项目
- java - Java中Biginteger的初始化
- node.js - 如何在生产中安全地使用环境变量机密
- java - 无法在 Eclipse 中使用 gradle 运行黄瓜功能文件。我收到“错误:无法找到或加载主类 cucumber.api.cli.Main”错误
- apache - 阿帕奇网络服务器
指示 - postgresql - 在 postgresql 中使用 jsonb_set 更新 jsonb 数组一个没有键的元素
- c - fscanf 不会在没有整数的情况下进入下一行
- javascript - AWS Lambda 未运行 DynamoDB 命令:getItem 或 batchGetItem
- python - Python 在正文电子邮件中发送 MySQL 查询
- windows - 仅在运行脚本时出现“RPC 服务器不可用”