Javascript SEQUELIZE:Sync({alter:true})有没有办法使我的关联表的数据保持一致?
谢谢你提前阅读 我目前正在使用SEQUELIZE和NODEJS开发一个应用程序 我想说的是,两个模型在分开的文件中,它们之间的关联如下: 文件1:Javascript SEQUELIZE:Sync({alter:true})有没有办法使我的关联表的数据保持一致?,javascript,node.js,sqlite,express,sequelize.js,Javascript,Node.js,Sqlite,Express,Sequelize.js,谢谢你提前阅读 我目前正在使用SEQUELIZE和NODEJS开发一个应用程序 我想说的是,两个模型在分开的文件中,它们之间的关联如下: 文件1: const Sequelize = require("sequelize"); const db = require("../db"); const Project = db.define("project", { name: { type: Sequelize.STRING, allowNull: false, uni
const Sequelize = require("sequelize");
const db = require("../db");
const Project = db.define("project", {
name: {
type: Sequelize.STRING,
allowNull: false,
unique: true
},
content: {
type: Sequelize.STRING,
allowNull: false,
unique: true
}
});
Project.prototype.associate = (models) => {
Project.hasMany(models.User);
};
module.exports = Project;
文件2:
const Sequelize = require("sequelize");
const db = require("../db");
const User = db.define("user", {
username: {
type: Sequelize.STRING,
unique: true,
allowNull: false
},
password: {
type: Sequelize.STRING,
unique: true,
allowNull: false
},
});
User.prototype.associate = (models) => {
User.belongsTo(models.Project);
};
module.exports = User;
我正在导入这些文件并创建数据库的连接和同步(),如下所示:
const domainsPath = path.join(__dirname, '../../domains');
//dataBaseConnection is an instance of Sequelize
fs.readdirSync(domainsPath).forEach(domainFileName => {
const domain = dataBaseConnection.import(path.join(domainsPath, domainFileName));
//just adding the objects to a parent return object(dataBase.domains) to use the models later
dataBase.domains[domain.name] = domain;
});
//Executing the associations. I've already tested it, It loads first the Project and then the User
Object.keys(dataBase.domains).forEach(key => {
if (dataBase.domains[key].prototype.hasOwnProperty('associate')) {
dataBase.domains[key].prototype.associate(dataBase.domains);
}
});
//connection Database Sync
dataBaseConnection.sync({ alter: true}).done((result) => {
console.log(`${logsColors.FgGreen} DataBase Conected!!!`);
});
如你所见。。。我已经设置了{Alter:true}选项配置,因为我仍处于开发阶段
因此,默认情况下,我的关系有一个onDelete='SET NULL',当nodemon重新启动我的服务器时。。。alter:true
删除源表,并在我的projectId字段上设置null
当然,如果我有机会将onDelete“级联”,它只会删除所有相关的注册表
有没有办法避免这种情况
最好的,你考虑过显式迁移而不是调用同步吗?@Anatoly我考虑过,但由于我仍在学习sequelize,我想保持这种方式。。。所以我可以开发和建立我所有的最终模型和数据。。。然后我可能会转向迁移。迁移是避免此类问题的快速方法吗?迁移使您能够控制模型所需的所有数据库修改。首先,您可以同步初始结构,将最终结构作为脚本从数据库中提取出来,在出现迁移后,您可以应用它们。另一个优势是能够拥有不同版本的应用程序和数据库结构。@Anatoly非常感谢!!!我会记住的!同时,你知道我要问的问题的解决方案吗?文档中提到同步:“删除模型中已删除或类型已更改的列中的数据”。你是否考虑过显式迁移而不是调用同步?@Anatoly我知道,但我仍在学习sequelize,我希望保持这种方式。。。所以我可以开发和建立我所有的最终模型和数据。。。然后我可能会转向迁移。迁移是避免此类问题的快速方法吗?迁移使您能够控制模型所需的所有数据库修改。首先,您可以同步初始结构,将最终结构作为脚本从数据库中提取出来,在出现迁移后,您可以应用它们。另一个优势是能够拥有不同版本的应用程序和数据库结构。@Anatoly非常感谢!!!我会记住的!同时,你知道我要问的问题的解决方案吗?文档中提到了同步:“删除模型中已删除或类型已更改的列中的数据”。