我(再次)感到困惑。
在定义数据库(MySQL)表时,使用 Sequelize,我想做一个 sync(forced:true),删除/创建表。到目前为止,一切都很好。
现在我对我的 user
表很满意,并且不想在每次运行时删除它,同时继续定义其他表。
所以,我想在用户
选项上设置一个标志,sync: {forced: false}
module.exports = (sequelize, DataTypes) => {
let Schema = sequelize.define(
"user",
{
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
BlaBla:{}
},
{ // options
sync: {force: false},
freezeTableName: true,
timestamps: true
});
return Schema;
};
这不起作用。每次运行时都会删除/创建表。
继续定义我的公司
表。
module.exports = (sequelize, DataTypes) => {
let Schema = sequelize.define(
"company",
{
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
BlaBla:{}
},
{ // options
sync: {force: true},
freezeTableName: true,
timestamps: false
});
return Schema;
};
问题
- 如何根据
sequelize.define
选项有选择地同步表?
最佳答案
不支持在 sequelize.define()
中选择性同步。请参阅Model Definition Configuration了解详情。在项目的其他地方,您必须调用 sequelize.sync({force: true})
来同步所有模型。您应该首先纠正这个问题,因为它会强制所有模型同步。
修复该问题后,您有几个选择:
1:继续使用迁移。对架构的每次添加或更改都会在迁移中捕获,因此您可以推出每个更改,而无需重新同步其他更改。 请参阅http://docs.sequelizejs.com/manual/migrations.html
2:按照您的建议单独同步每个表。您需要分别为每个模型调用 sync()
方法,例如:
const user = require('./user');
const company = require('./company');
company.sync();
compant.sync({force:true});
这对于早期开发可能是实用的,但随着项目的进展并开始发布,迁移应该是您选择推出架构更改的方法。
参见http://docs.sequelizejs.com/manual/models-definition.html#database-synchronization
关于mysql - Node 、Sequelize、同步模型、混合力 : true/false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55826057/