Sequelize.js外键

使用Sequelize.js时,以下代码不会在表上添加任何外键。

var MainDashboard = sequelize.define('main_dashboard', { title: Sequelize.STRING }, { freezeTableName: true }) MainClient.hasOne(MainDashboard, { foreignKey: 'idClient' }) MainDashboard.hasOne(MainClient, { foreignKey: 'clientId' }) sequelize.sync({ force: true }) 

有没有办法强制Sequelize.js添加这些外键约束?

在我遇到同样的问题之前,当我理解Sequelize的设置的function时解决了。

开门见山!

假设我们有两个对象:人和父亲

 var Person = sequelize.define('Person', { name: Sequelize.STRING }); var Father = sequelize.define('Father', { age: Sequelize.STRING, //The magic start here personId: { type: Sequelize.INTEGER, references: 'persons', // <<< Note, its table's name, not object name referencesKey: 'id' // <<< Note, its a column name } }); Person.hasMany(Father); // Set one to many relationship 

也许它会帮助你

编辑:

你可以阅读这个更好地理解:

http://docs.sequelizejs.com/en/1.7.0/docs/associations/#foreign-keys

你需要添加foreignKeyConstraint:true
尝试

 MainClient.hasOne(MainDashboard, { foreignKey: 'idClient' , foreignKeyConstraint:true }) 

我只是试图运行你的代码,行看起来很好创build:

 CREATE TABLE IF NOT EXISTS `main_dashboard` (`title` VARCHAR(255), `id` INTEGER NOT NULL auto_increment , `idClient` INTEGER, PRIMARY KEY (`id`)) ENGINE=InnoDB; CREATE TABLE IF NOT EXISTS `main_client` (`id` INTEGER NOT NULL auto_increment, `clientId` INTEGER, PRIMARY KEY (`id`)) ENGINE=InnoDB; 

clientId被添加到main_clientidClient被添加到main_dashboard

看来你已经略微困惑了hasOne方法。 每次调用hasOne都会创build一个关联,因此您的代码将两个表关联起来。 您正在查找的方法是belongsTo

如果你想让每个客户有一个仪表盘,代码如下:

 MainClient.hasOne(MainDashboard, { foreignKey: 'clientId' }) MainDashboard.belongsTo(MainClient, { foreignKey: 'clientId' }) 

这将在main_dashboard表上创build一个clientId字段,该字段与main_client表的id字段相关

总之, belongsTo将关系添加到您正在调用方法的表上, hasOne将它添加到作为参数给出的表上。