sql >> Databáze >  >> RDS >> Mysql

Jak implementovat INSERT ON DUPLICATE KEY UPDATE aka upsert v CakePHP 3?

Pomocí odpovědi poskytnuté na https://stackoverflow.com/a/24990944/80353 , chci to přeformulovat pomocí ukázky kódu uvedeného v otázce.

Chcete-li spustit upsert na následujících záznamech

Felicia, 27
Timmy, 71

do této tabulky

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

nejlepší způsob je napsat 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();

Zkontrolujte toto pro podrobnosti o epilog

Zkontrolujte toto Podrobnosti o tom, jak napsat vložení více záznamů do jednoho dotazu




  1. Prohledejte všechny sloupce, všechny tabulky pro konkrétní hodnotu

  2. MySQL:Nelze použít SIGNAL v Trigger

  3. Mysql Kopírování databáze ze serveru na server jediným příkazem

  4. Vytvoření testovacího prostředí z produkčního úložiště