是否可以使用Sequelize强制存在外键?

时间:2014-08-15 13:10:27

标签: sequelize.js

我的模特是:

module.exports = function(sequelize, DataTypes) {
  return Person = sequelize.define('Person', {
    PersonTime: {
      type: DataTypes.INTEGER,
      allowNull: false
    },
    message: {
      type: DataTypes.STRING,
      allowNull: false
    }
  }, {
    classMethods: {
      associate: function(models) {
        return Person.hasMany(models.Thought, {
          foreignKey: 'PersonId'
        });
      }
    }
  });
};

我想强迫每个人都属于一个思想,因此在Thought表格中,我希望PersonId字段是必需的。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

您想要的代码可能是:

Person.hasMany(Thought)
Thought.belongsTo(Person)

但是我试过这样就不会在数据库级别给你一个“真正的”外键,这就是你想要的。经过一番试验和错误的搜索,我得出了这个:

Thought.belongsTo(Person, { constraints: true, foreignKeyConstraint:true  } );
Person.hasMany(Thought)

当您创建SQL .sync()时:

CREATE TABLE IF NOT EXISTS `Persons` (
    `id` INTEGER NOT NULL auto_increment , 
    `PersonTime` INTEGER NOT NULL, 
    `message` VARCHAR(255) NOT NULL,
    `createdAt` DATETIME NOT NULL, 
    `updatedAt` DATETIME NOT NULL, 
    PRIMARY KEY (`id`)
);

CREATE TABLE IF NOT EXISTS `Thoughts` (
    `id` INTEGER NOT NULL auto_increment, 
    `text` VARCHAR(255), 
    `createdAt` DATETIME NOT NULL, 
    `updatedAt` DATETIME NOT NULL, 
    `PersonId` INTEGER, 
    PRIMARY KEY (`id`), 
    FOREIGN KEY (`PersonId`) REFERENCES `Persons` (`id`)
);

documentation中的更多详细信息,虽然这是帮助我使其发挥作用的问题的答案:Sequelize.js foreign key