Существует ли метод модели или экземпляра, который будет выполнять вставку или обновление, в зависимости от того, существует ли запись? Предпочтительно использовать синтаксис MySQL "INSERT ON DUPLICATE KEY UPDATE"?
Поддерживает ли поддержка Sequelize вставку при повторном обновлении ключа?
Ответ 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