我使用Sequelize作为我的服务器(使用mysql方言);在Sequelize的文档中写道:
var Task = this.sequelize.define('Task', { title: Sequelize.STRING })
, User = this.sequelize.define('User', { username: Sequelize.STRING })
User.hasMany(Task)
Task.belongsTo(User)
使用约束自动创建外键引用;但对我来说,这不会发生:
var Shop = sequelize.define('Shop', {
name: Sequelize.STRING,
address: Sequelize.STRING,
phone: Sequelize.STRING,
email: Sequelize.STRING,
percentage: Sequelize.FLOAT,
text: Sequelize.TEXT,
categories: Sequelize.TEXT,
start: Sequelize.DATE,
end: Sequelize.DATE
});
var Offer = sequelize.define('Offer', {
name: Sequelize.STRING,
deadline: Sequelize.DATE,
optionDuration: Sequelize.INTEGER
});
Shop.hasMany(Offer);
Offer.belongsTo(Shop);
这创建了两个表商店和商品,它们都只有“id”主键
我也有一些n:m协会,如:
Group.hasMany(Accesslevel);
Accesslevel.hasMany(Group);
而且在这种情况下,在Sequelize创建的连接表中,没有外键;所以,如果我删除前 . 一个acccesslevel,不会删除连接表中相应的记录accesslevelsgroups .
有人知道我做错了什么或错过了什么吗?我需要的是为关联创建所有外键以及指定行为'onDelete'和'onUpdate'(级联)的可能性
- 更新我已经创建了一个执行同步的路由:
myServer.get('/sync', function (req, res) {
sequelize.sync({force: true}).success(function() {
console.log('sync done');
res.send(200, 'sync done');
}).error(function(error) {
console.log('there was a problem');
res.send(200, 'there was a problem');
});
});
然后在浏览器中输入127.0.0.1:port/sync来创建db结构
1 回答
在创建表(在数据库中)后添加了关系吗?
如果您的方案在数据库中尚不存在,则需要
.sync({ force: true })
修改您的方案's and run your program again. Sequelize will only create the table and all it' .在完成所有关联后,您是否正在调用同步?
你在使用InnoDB吗?
奇怪的是,我可以重现这一点,最简单的解决方法是手动定义密钥,我认为,这就是我解决它的方式,否则可能是一个错误,否则我不确定 .
看这里:http://sequelizejs.com/docs/latest/associations#block-3-line-24