Sử dụng câu trả lời được cung cấp tại https://stackoverflow.com/a/24990944/80353 , Tôi muốn diễn đạt lại điều này bằng cách sử dụng mẫu mã được đưa ra trong câu hỏi.
Để chạy upert trên các bản ghi sau
Felicia, 27
Timmy, 71
vào bảng này
+----+----------+-----+
| id | username | age |
+----+----------+-----+
| 1 | admin | 33 |
| 2 | Timmy | 17 |
| 3 | Sally | 23 |
+----+----------+-----+
cách tốt nhất là viết nó là
$newUsers = [
[
'username' => 'Felicia',
'age' => 27,
],
[
'username' => 'Timmy',
'age' => 71,
],
];
$columns = array_keys($newUsers[0]);
$upsertQuery = $this->Users->query();
$upsertQuery->insert($columns);
// need to run clause('values') AFTER insert()
$upsertQuery->clause('values')->values($newUsers);
$upsertQuery->epilog('ON DUPLICATE KEY UPDATE `username`=VALUES(`username`), `age`=VALUES(`age`)')
->execute();
Kiểm tra điều này
tìm hiểu chi tiết về epilog
Kiểm tra điều này để biết chi tiết về cách viết chèn nhiều bản ghi trong một truy vấn duy nhất