спасибо, что прочитали заранее !!
В настоящее время я занимаюсь разработкой приложения с использованием SEQUELIZE и NODEJS.
что я машу двумя моделями в отдельных файлах с ассоциацией между ними, например Итак:
Файл 1:
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;
Я импортирую эти файлы и создаю соединение и Syn c () DB, как это:
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' и, когда nodemoon перезапускает мой сервер ... alter:true
удаляет исходную таблицу и устанавливает null на моем поле projectId.
конечно, если бы я позволил onDelete «CASCADE», он просто УДАЛИТ все связанные реестры ...
есть ли способ избежать этого ??
лучший