【发布时间】:2014-08-10 04:27:42
【问题描述】:
我将 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);
这会创建两个表 shop 和 offer,它们都只有“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 来创建数据库结构
【问题讨论】:
-
sequelize 不支持外键,需要自己创建。
-
@WillemD'haeseleer 好吧,当我使用它时就是这种情况,很高兴现在支持它。
-
是的,我只是在链接同一个文档页面...但是您知道为什么在我的情况下,外键没有按照文档中的说明自动创建吗?
-
创建表后添加关系了吗?你打电话给
sync了吗,你需要force: true来更新表格(将删除表格)。你在使用 InnoDB 吗?
标签: node.js sequelize.js