Sequelize.запрос на JS удалить?
есть ли способ написать запрос delete / deleteAll, например findAll?
например, я хочу сделать что-то вроде этого (предполагая, что MyModel является моделью Sequelize...):
MyModel.deleteAll({ where: ['some_field != ?', something] })
.on('success', function() { /* ... */ });
7 ответов:
для тех, кто использует Sequelize версии 3 и выше, используйте:
Model.destroy({ where: { // criteria } })
Я искал глубоко в коде, шаг за шагом в следующем файлы:
https://github.com/sdepold/sequelize/blob/master/test/Model/destroy.js
https://github.com/sdepold/sequelize/blob/master/lib/model.js#L140
https://github.com/sdepold/sequelize/blob/master/lib/query-interface.js#L207-217
https://github.com/sdepold/sequelize/blob/master/lib/connectors/mysql/query-generator.js
Что Я найдено:
нет метода deleteAll, есть метод destroy (), который вы можете вызвать для записи, например:
Project.find(123).on('success', function(project) { project.destroy().on('success', function(u) { if (u && u.deletedAt) { // successfully deleted the project } }) })
Не знаю, если вопрос по-прежнему актуален, но я нашел следующее На документации Sequelize.
User.destroy('`name` LIKE "J%"').success(function() { // We just deleted all rows that have a name starting with "J" })
http://sequelizejs.com/blog/state-of-v1-7-0
надеюсь, что это помогает!
этот пример показывает, как вам обещает вместо обратного вызова.
Model.destroy({ where: { id: 123 //this will be your id that you want to delete } }).then(function(rowDeleted){ // rowDeleted will return number of rows deleted if(rowDeleted === 1){ console.log('Deleted successfully'); } }, function(err){ console.log(err); });
проверьте эту ссылку для получения дополнительной информации http://docs.sequelizejs.com/en/latest/api/model/#destroyoptions-promiseinteger
в новой версии, вы можете попробовать что-то вроде этого
function (req,res) { model.destroy({ where: { id: req.params.id } }) .then(function (deletedRecord) { if(deletedRecord === 1){ res.status(200).json({message:"Deleted successfully"}); } else { res.status(404).json({message:"record not found"}) } }) .catch(function (error){ res.status(500).json(error); });
Я написал что-то вроде этого для парусов некоторое время назад, в случае, если он экономит время:
пример использования:
// Delete the user with id=4 User.findAndDelete(4,function(error,result){ // all done }); // Delete all users with type === 'suspended' User.findAndDelete({ type: 'suspended' },function(error,result){ // all done });
источник:
/** * Retrieve models which match `where`, then delete them */ function findAndDelete (where,callback) { // Handle *where* argument which is specified as an integer if (_.isFinite(+where)) { where = { id: where }; } Model.findAll({ where:where }).success(function(collection) { if (collection) { if (_.isArray(collection)) { Model.deleteAll(collection, callback); } else { collection.destroy(). success(_.unprefix(callback)). error(callback); } } else { callback(null,collection); } }).error(callback); } /** * Delete all `models` using the query chainer */ deleteAll: function (models) { var chainer = new Sequelize.Utils.QueryChainer(); _.each(models,function(m,index) { chainer.add(m.destroy()); }); return chainer.run(); }
от: ОРМ.js.
надеюсь, что это поможет!
вот ES6 с помощью Await / Async пример:
async deleteProduct(id) { if (!id) { return {msg: 'No Id specified..', payload: 1}; } try { return !!await products.destroy({ where: { id: id } }); } catch (e) { return false; } }
обратите внимание, что я использую
!!
Bang Bang оператор на результат ожидания, который изменит результат в логическое значение.