Поддерживает ли поддержка Sequelize вставку при повторном обновлении ключа?

Существует ли метод модели или экземпляра, который будет выполнять вставку или обновление, в зависимости от того, существует ли запись? Предпочтительно использовать синтаксис MySQL "INSERT ON DUPLICATE KEY UPDATE"?

Ответ 1

они недавно добавили эту функцию upsert или insertOrUpdate

  /** 
  * Insert or update a single row. An update will be executed if a row
  * which matches the supplied values on either the primary key or a unique
  * key is found. Note that the unique index must be defined in your sequelize
  * model and not just in the table. Otherwise you may experience a unique 
  * constraint violation, because sequelize fails to identify the row that
  * should be updated.
  */

  Model.upsert({uniqueKey: 1234, name: 'joe'}).then(function () {
        // cheer for joy
  });

Ответ 2

Sequelize в настоящее время не поддерживает upsert - я считаю, что было трудно представить хорошее решение на основе креста.

Однако вы можете сделать findOrCreate и updateAttributes.

Изменить: Sequelize теперь поддерживает UPSERT с довольно приличной реализацией кросс-диалекта, см.: https://github.com/sequelize/sequelize/pull/2518