Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么sequelize 5会这样做?_Javascript_Node.js_Express_Sequelize.js - Fatal编程技术网

Javascript 为什么sequelize 5会这样做?

Javascript 为什么sequelize 5会这样做?,javascript,node.js,express,sequelize.js,Javascript,Node.js,Express,Sequelize.js,你好! 当我在用户模型和测试之间创建关联时,sequelize工作得很好。 但是,当我想为测试和问题添加新的关联时,请继续添加新列my foreign key Test_id和extra testId 为什么? user.js test.js 问题.js index.js 这些模型生成一些SQL查询: Executing (default): CREATE TABLE IF NOT EXISTS `users` (`id` INTEGER NOT NULL auto_increment , `u

你好! 当我在用户模型和测试之间创建关联时,sequelize工作得很好。 但是,当我想为测试和问题添加新的关联时,请继续添加新列my foreign key Test_id和extra testId

为什么?

user.js test.js 问题.js index.js 这些模型生成一些SQL查询:

Executing (default): CREATE TABLE IF NOT EXISTS `users` (`id` INTEGER NOT NULL auto_increment , `username` VARCHAR(255) UNIQUE, `password` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;

Executing (default): SHOW INDEX FROM `users` FROM `nrforms`

Executing (default): CREATE TABLE IF NOT EXISTS `tests` (`id` INTEGER NOT NULL auto_increment , `title` VARCHAR(255) UNIQUE, `description` TEXT, `picture` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (`id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB;

Executing (default): SHOW INDEX FROM `tests` FROM `nrforms`

Executing (default): CREATE TABLE IF NOT EXISTS `questions` (`id` INTEGER NOT NULL auto_increment , `title` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `test_id` INTEGER, `testId` INTEGER, PRIMARY KEY (`id`), FOREIGN KEY (`test_id`) REFERENCES `tests` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, FOREIGN KEY (`testId`) REFERENCES `tests` (`id`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB;

Executing (default): SHOW INDEX FROM `questions` FROM `nrforms`
在所有模型中添加下划线:false:

module.exports = (sequelize, DataType) => {
    const Question = sequelize.define('question', {
        title: {
            type: DataType.STRING,
            required: true,
        },
    },
        {
            underscored: false, // <---- add this in all your models
        });

    Question.associate = (models) => {
        Question.belongsTo(models.test, {
            foreignKey: 'test_id',
        });
    };
    return Question;
};
我发现了一个问题

  Test.associate = (models) => {
    Test.hasMany(models.question, {
      foreignKey: 'id', // was foreign_key: 'id' 
    });
  };
可能是自动创建反向关联的错误或触发器?
但是我没有找到相关的信息。

谢谢,但是为什么用户和测试关联没有创建一个userId列。它不起作用```CREATE TABLE IF NOT EXISTS问题id INTEGER NOT NULL auto_increment,title VARCHAR255,createdAt DATETIME NOT NULL,updatedAt DATETIME NOT NULL,test_id INTEGER,testId INTEGER,主键id,外键test_id REFERENCES tests id ON DELETE SET NULL ON UPDATE CASCADE,外键testId引用了DELETE上的测试id,在updatecascade引擎上设置NULL=InnoDB;正在执行default:SHOW INDEX FROM questions FROM`nrforms````testId-已生成。它本应通过以下方式解决。。。我得检查一下打字错误。。我在想你错过了什么:@Shaharyar,你知道这房子的一些情况吗?为什么它会创建自动反向关联?
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
require('dotenv').config();

const config = process.env;
const basename = path.basename(module.filename);

const sequelize = new Sequelize({
  database: config.DB_NAME,
  username: config.DB_USER,
  password: config.DB_PASS,
  dialect: config.DB_DIALECT,
});
const db = {};

fs
  .readdirSync(__dirname)
  .filter(file => (file.indexOf('.') !== 0) && (file !== basename))
  .forEach((file) => {
    const model = sequelize.import(path.join(__dirname, file));
    db[model.name] = model;
  });

Object.keys(db).forEach((modelName) => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

Object.keys(db).forEach((modelName) => {
  if ('loadScopes' in db[modelName]) {
    db[modelName].loadScopes(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;
Executing (default): CREATE TABLE IF NOT EXISTS `users` (`id` INTEGER NOT NULL auto_increment , `username` VARCHAR(255) UNIQUE, `password` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;

Executing (default): SHOW INDEX FROM `users` FROM `nrforms`

Executing (default): CREATE TABLE IF NOT EXISTS `tests` (`id` INTEGER NOT NULL auto_increment , `title` VARCHAR(255) UNIQUE, `description` TEXT, `picture` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (`id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB;

Executing (default): SHOW INDEX FROM `tests` FROM `nrforms`

Executing (default): CREATE TABLE IF NOT EXISTS `questions` (`id` INTEGER NOT NULL auto_increment , `title` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `test_id` INTEGER, `testId` INTEGER, PRIMARY KEY (`id`), FOREIGN KEY (`test_id`) REFERENCES `tests` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, FOREIGN KEY (`testId`) REFERENCES `tests` (`id`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB;

Executing (default): SHOW INDEX FROM `questions` FROM `nrforms`
module.exports = (sequelize, DataType) => {
    const Question = sequelize.define('question', {
        title: {
            type: DataType.STRING,
            required: true,
        },
    },
        {
            underscored: false, // <---- add this in all your models
        });

    Question.associate = (models) => {
        Question.belongsTo(models.test, {
            foreignKey: 'test_id',
        });
    };
    return Question;
};
  Test.associate = (models) => {
    Test.hasMany(models.question, {
      foreignKey: 'id', // was foreign_key: 'id' 
    });
  };