Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да внедрите INSERT ON DUPLICATE KEY UPDATE, известен още като upsert в CakePHP 3?

Използвайки отговора, предоставен на https://stackoverflow.com/a/24990944/80353 , искам да перифразирам това, като използвам примерния код, даден във въпроса.

За да стартирате upsert на следните записи

Felicia, 27
Timmy, 71

в тази таблица

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

най-добрият начин е да го напишете като

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

Проверете това за подробности относно epilog

Проверете това за подробности как да напишете вмъкване на множество записи в една заявка




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel eloquent withCount() би трябвало да е по-бавен от просто with()

  2. Оптимална MySQL-конфигурация (my.cnf)

  3. mysql Множество чужди ключове в таблица към един и същ първичен ключ

  4. Драйвер за превключване на CodeIgniter от mysql --> mysqli

  5. Как да накарам втория аргумент на Round() да работи с колони?