sql >> Database >  >> RDS >> Mysql

Hoe implementeer je INSERT ON DUPLICATE KEY UPDATE oftewel upsert in CakePHP 3?

Met behulp van het antwoord op https://stackoverflow.com/a/24990944/80353 , ik wil dit herformuleren met behulp van het codevoorbeeld dat in de vraag wordt gegeven.

Om boos te worden op de volgende records

Felicia, 27
Timmy, 71

in deze tabel

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

de beste manier is om het te schrijven als

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

Controleer dit voor details over epilog

Controleer dit voor details over het schrijven van meerdere records in een enkele zoekopdracht




  1. Methode voor het trapsgewijs verwijderen van zachte verwijderingen in ouder-kindrelaties

  2. Groeperen op gespecificeerde kolom in PostgreSQL

  3. mysql FULLTEXT zoek meerdere woorden

  4. Splits een mysqldump-bestand op met meerdere databases, per database