2017-02-10 1 views

Répondre

1

Vous ne pouvez pas ignorer les modèles en utilisant la synchronisation sur la principale sequelize,

mais vous pouvez utiliser la fonction de synchronisation de modèle et n'appeler la fonction de synchronisation sur les modèles que vous souhaitez synchroniser

http://docs.sequelizejs.com/en/latest/api/model/#sync-promisethis

0

Ok, comme dit keval je dois synchroniser() sur les modèles, donc je copier/coller le code de sequelize.sync() et changer:

if (config.sync && config.sync != 'false') { 
    let models = []; 
    sequelize.modelManager.forEachModel(function(model) { 
    if (model && model.options.sync !== false) { 
     models.push(model); 
    } else { 
     // DB should throw an SQL error if referencing inexistant table 
    } 
    }); 
    return Sequelize.Promise.each(models, function(model) { 
    return model.sync(config.sync); 
    }); 
} 
3

J'utilise une méthode assez sim ilar à la réponse de Crusader quand je veux créer et utiliser Views avec Sequelize. Dans ce cas, je ne veux pas que Sequelize essaie de synchroniser la vue car cela entraîne la création d'une table. Pour cela, on ajoute ce qui suit à un modèle Sequelize:

var MyView = sequelize.define("MyView", { 
    status: { type: DataTypes.TEXT }, 
}, 
{ 
    doNotSync: true, 
    tableName: "myDatabaseView", // The actual view name in database 
    classMethods: { 
    createView: function(models) { 
     return sequelize.query("CREATE OR REPLACE VIEW myDatabaseView ...;"); 
    } 
}); 

Maintenant, j'ai cette configuration je dois vous assurer que les vues ne sont pas inclus lorsque je crée la base de données et que la méthode createView est appelée sur chacun des vues.

var tables = []; 
sequelize.modelManager.forEachModel(m => { 
    if (m.options.doNotSync !== true) { 
     tables.push(m); 
    }    
}); 

return Sequelize.Promise.each(tables, t => { 

    return t.sync({force: true}); 

}).then(_ => { 

    var views = []; 
    sequelize.modelManager.forEachModel(m => { 
     if (m.options.doNotSync && m.createView) { 
     views.push(m); 
     }    
    }); 

    return Sequelize.Promise.each(views, v => { 

    return v.createView(sequelize.models); 

    }); 

}); 

Aussi, juste pour être du bon côté ajouter des crochets pour éviter d'utiliser l'un des créer/modifier/supprimer des opérations sur les points de vue.

hooks: { 
    beforeBulkCreate: throwNotAllowedError, 
    beforeBulkDestroy: throwNotAllowedError, 
    beforeBulkUpdate: throwNotAllowedError, 
    beforeCreate: throwNotAllowedError, 
    beforeDestroy: throwNotAllowedError, 
    beforeUpdate: throwNotAllowedError 
} 

throwNotAllowedError est une simple fonction

function throwNotAllowedError() { 
    throw new Error("Operation not allowed on a view"); 
} 

espoir qui aide. L'acquisition de vues dans Sequelize nous a permis d'augmenter considérablement la productivité du projet.

Et vous pouvez toujours créer des relations et des associations à partir des vues vous permettant d'utiliser la notation include:[] pour apporter des tables supplémentaires dans votre requête de vue.