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_client
, idClient
被添加到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
将它添加到作为参数给出的表上。