【发布时间】:2014-12-21 17:51:15
【问题描述】:
我正在使用 CakePHP 3 和 MySQL。
我想通过CakePHP 3 模型实现INSERT on DUPLICATE KEY UPDATE 又名upsert 查询。
给定下表:
+----+----------+-----+
| id | username | age |
+----+----------+-----+
| 1 | admin | 33 |
| 2 | Timmy | 17 |
| 3 | Sally | 23 |
+----+----------+-----+
其中id 是主键,username 是唯一索引
当我有以下值等待更新时:
Felicia, 27
Timmy, 71
我希望 在 upsert 之后得到以下结果:
+----+----------+-----+
| id | username | age |
+----+----------+-----+
| 1 | admin | 33 |
| 2 | Timmy | 71 |
| 3 | Sally | 23 |
| 4 | Felicia | 27 |
+----+----------+-----+
我知道如何在 MySQL 查询中进行 upsert:
INSERT INTO `users` (`username`, `age`)
VALUES ('Felicia', 27), ('Timmy', 71)
ON DUPLICATE KEY UPDATE
`username`=VALUES(`username`),`age`=VALUES(`age`);
我知道如何在 CakePHP3 的多个查询中做到这一点。
$newUsers = [
[
'username' => 'Felicia',
'age' => 27,
],
[
'username' => 'Timmy',
'age' => 71,
],
];
foreach ($newUsers as $newUser) {
$existingRecord = $this->Users->find()
->select(['id'])
->where(['username' => $newUser['username']])
->first();
if (empty($existingRecord)) {
$insertQuery = $this->Users->query();
$insertQuery->insert(array_keys($newUser))
->values($newUser)
->execute();
} else {
$updateQuery = $this->Users->query();
$updateQuery->update()
->set($newUser)
->where(['id' => $existingRecord->id])
->execute();
}
}
我想知道的是:
有没有办法在单行中使用 CakePHP 3 进行 upsert,即使我使用链接?
请告知我该如何实施。
【问题讨论】:
-
StackOverflow 不是代码编写服务。请发布您迄今为止尝试过的内容以及遇到的问题。
-
只是为了澄清:它没有重复 [CakePHP 3.0:如何在重复键更新时插入?][1] [1]:stackoverflow.com/questions/24852904/…
-
@Dirk 你没有澄清任何事情,你只是在发表声明。想解释一下为什么你认为它不是重复的吗?
-
@TomaszKowalczyk 现在好点了吗?
标签: mysql cakephp insert-update upsert cakephp-3.0