在 Sequelize 中没有用于管理视图的内置方法,但您可以使用普通 SQL 查询创建它们并使用普通 Sequelize 模型管理它们。
如果您按照 Sequelize 文档的建议使用 umzug 进行迁移,则可以使用类似于以下内容的迁移来创建视图:
const view_name = 'my_view';
const query = '<SQL QUERY THAT RETURNS YOUR VIEW>';
module.exports = {
up: function (database, Sequelize) {
return database.query(`CREATE VIEW ${view_name} AS ${query}`);
},
down: function (database, Sequelize) {
return database.query(`DROP VIEW ${view_name}`);
}
}
对于视图更改或更新,您应该使用 CREATE OR REPLACE VIEW 语法来确保您可以回滚架构更改 - 避免放弃旧视图并创建新视图!
const view_name = 'my_view';
const original_query = '<SQL QUERY THAT RETURNS YOUR VIEW>';
const new_query = '<SQL QUERY THAT RETURNS YOUR UPDATED VIEW>';
module.exports = {
up: function (database, Sequelize) {
return database.query(`CREATE OR REPLACE VIEW ${view_name} AS ${new_query}`);
},
down: function (database, Sequelize) {
return database.query(`CREATE OR REPLACE VIEW ${view_name} AS ${original_query}`);
}
}
当然,确切的代码 sn-ps 会根据您迄今为止设置迁移的方式而有所不同。
迁移完成后,像往常一样创建一个代表视图架构的 Sequelize 模型,使用视图名称作为表名称。所有find 系列函数都应该按预期工作,而update、delete 和create 应该会失败。
您可以参考raw queries 的 Sequelize 文档,以及此 example repo 以将 Umzug 与 Sequelize 结合使用。我能找到的关于 Umzug 本身的唯一正式文档是它的 NPM page。