ПОСЛЕДОВАТЕЛЬНОСТЬ: Есть ли способ .Syn c ({alter: true}) сохранить данные моей таблицы связей согласованными? - PullRequest
0 голосов
/ 24 апреля 2020

спасибо, что прочитали заранее !!

В настоящее время я занимаюсь разработкой приложения с использованием 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», он просто УДАЛИТ все связанные реестры ...

есть ли способ избежать этого ??

лучший

...