2017-02-10 2 views

Antwort

0

Ok synchronisieren möchten, wie gesagt, Keval ich brauche() auf Modelle zu synchronisieren, so dass ich kopieren/Einfügen-Code aus sequelize.sync() und es ändern:

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

ich benutze eine Methode recht sim Ähnlich wie Crusaders Antwort, wenn ich Views mit Sequelize erstellen und verwenden möchte. In diesem Fall möchte Sequelize nicht versuchen, die Ansicht zu synchronisieren, da dies dazu führt, dass eine Tabelle erstellt wird. Um dies zu tun ich folgendes zu einem Sequelize Modell hinzufügen:

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 ...;"); 
    } 
}); 

Jetzt habe ich, dass das Setup ich brauche, um sicherzustellen, dass die Ansichten sind nicht enthalten, wenn ich die Datenbank zu erstellen, und dass die createView Verfahren werden auf jedem der angerufene Ansichten.

Auch, um auf der sicheren Seite zu sein, füge ich Hooks hinzu, um zu verhindern, dass irgendwelche der create/update/delete-Operationen auf den Ansichten verwendet werden.

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

Wo throwNotAllowedError ist eine einfache Funktion

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

Hoffnung, das hilft. Durch die Einführung von Sequelize konnten wir die Produktivität des Projekts massiv steigern.

Und Sie können weiterhin Beziehungen und Verknüpfungen aus den Ansichten erstellen, die Ihnen die Verwendung der include:[]-Notation ermöglichen, zusätzliche Tabellen in Ihre Ansichtsabfrage zu bringen.

Verwandte Themen