我将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创建的联接表中也没有外键;所以如果我删除前。一个访问级别,则不会删除联接表访问级别组中的相应记录。
有人知道我做错了什么还是错过了什么吗?我需要为关联创建所有外键,并可以指定行为“ 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结构。
创建表之后(在数据库中),是否添加了关系?
您需要.sync({ force: true })
修改方案并再次运行程序。如果数据库中尚不存在该表,则Sequelize将仅创建该表及其所有引用。
建立所有关联后,您是否要调用同步?
您在使用InnoDB吗?
奇怪的是,我可以重现这一点,最简单的解决方法是我认为手动定义密钥,这就是我解决的方式,可能是一个错误,否则我不确定。
参见此处:http : //sequelizejs.com/docs/latest/associations#block-3-line-24
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句