Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zaimplementować INSERT ON DUPLICATE KEY UPDATE aka upsert w CakePHP 3?

Korzystając z odpowiedzi podanej na https://stackoverflow.com/a/24990944/80353 , chcę to przeformułować, używając przykładowego kodu podanego w pytaniu.

Aby uruchomić upsert na następujących rekordach

Felicia, 27
Timmy, 71

do tej tabeli

+----+----------+-----+
| id | username | age |
+----+----------+-----+
|  1 | admin    |  33 |
|  2 | Timmy    |  17 |
|  3 | Sally    |  23 |
+----+----------+-----+

najlepiej jest napisać to jako

$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();

Sprawdź to po szczegóły dotyczące epilog

Sprawdź to aby uzyskać szczegółowe informacje na temat wstawiania wielu rekordów w jednym zapytaniu




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. #1411 — Nieprawidłowa wartość daty/godziny dla funkcji str_to_date na INSERT INTO...SELECT

  2. Ostrzeżenie:mysqli_connect():(HY000/1045):Odmowa dostępu dla użytkownika 'username'@'localhost' (przy użyciu hasła:TAK)

  3. Tworzenie kursora za pomocą Dynamic SQL w MySQL

  4. read_sql pand z listą wartości warunku WHERE

  5. Czy wpływ na klucze podstawowe ma wpływ po zaznaczeniu, zaktualizowaniu lub wstawieniu tylko przy użyciu SQL?