Cer*_*ler 6 node.js sequelize.js
我使用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)
Run Code Online (Sandbox Code Playgroud)
使用约束自动创建外键引用; 但对我来说,这不会发生:
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);
Run Code Online (Sandbox Code Playgroud)
这创建了两个表商店和商品,它们都只有"id"主键
我也有一些n:m协会,如:
Group.hasMany(Accesslevel);
Accesslevel.hasMany(Group);
Run Code Online (Sandbox Code Playgroud)
而且在这种情况下,在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');
});
});
Run Code Online (Sandbox Code Playgroud)
然后在浏览器中输入127.0.0.1:port/sync来创建db结构
您是否在创建表(在数据库中)之后添加了关系?
你需要.sync({ force: true })如果你修改你的方案并再次运行你的程序,。如果该表在数据库中尚不存在,Sequelize 只会创建该表及其所有引用。
在建立所有关联后,您是否调用同步?
你在使用 InnoDB 吗?
奇怪的是,我可以重现这一点,我认为最简单的解决方法是手动定义密钥,这就是我解决的方法,可能是一个错误,否则我不确定。
见这里:http : //sequelizejs.com/docs/latest/associations#block-3-line-24
| 归档时间: |
|
| 查看次数: |
7346 次 |
| 最近记录: |