2017-02-10 4 views

答えて

0

[OK]を同期したいモデルに同期関数を呼び出しますKevalは私がモデルに)(同期する必要があるので、私はsequelize.sync(から/貼り付けコード)をコピーし、それを変更:

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

を私はかなりのSIMメソッドを使用しますViewsをSequelizeで作成して使用したいときのCrusaderの答えと同じです。このケースでは、Sequelizeでテーブルを作成するときにビューを同期させたくない場合があります。私は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 ...;"); 
    } 
}); 

今、私は、データベースを作成するときにビューが含まれていないことを確認する必要があり、そのセットアップを持っているとcreateView方法は、それぞれに呼ばれていること再生回数

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); 

    }); 

}); 

また、安全な側にあるために、ビューの作成/更新/削除操作の使用を防ぐためにフックを追加します。

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

どこthrowNotAllowedError

単純な関数である
function throwNotAllowedError() { 
    throw new Error("Operation not allowed on a view"); 
} 

お役に立てば幸いです。 Sequelizeのビューを取得することで、プロジェクトの生産性が大幅に向上しました。

ビューからリレーションシップとアソシエーションを作成して、include:[]表記を使用してビューのクエリに追加の表を表示することができます。

関連する問題