Ich benutze Tabellen und Ansichten in meiner DB (mysql), also für Dev/Test-Umgebung möchte ich sync() verwenden, aber es stürzt auf Ansichten ab.Wie make sequelize.sync() einige Modelle weglassen?
Kann ich diese Modelle irgendwie weglassen?
Ich benutze Tabellen und Ansichten in meiner DB (mysql), also für Dev/Test-Umgebung möchte ich sync() verwenden, aber es stürzt auf Ansichten ab.Wie make sequelize.sync() einige Modelle weglassen?
Kann ich diese Modelle irgendwie weglassen?
Sie können keine Modelle überspringen durch Synchronisierung auf Haupt sequelize Verwendung
sondern können Sie Modell Sync-Funktion verwenden und nur Sync-Funktion bei Modellen rufen Sie
http://docs.sequelizejs.com/en/latest/api/model/#sync-promisethis
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);
});
}
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.