gpt4 book ai didi

node.js - 不创建带有 Sequelize 的外键

转载 作者:搜寻专家 更新时间:2023-10-31 22:45:47 24 4
gpt4 key购买 nike

我为我的服务器使用 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);

这将创建两个表 shops 和 offers,它们都只有“id”主键

我也有一些 n:m 关联,例如:

Group.hasMany(Accesslevel);
Accesslevel.hasMany(Group);

但同样在这种情况下,在 Sequelize 创建的连接表中,没有外键;所以如果我删除前。一个accesslevel,而不是join table 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 来创建数据库结构

最佳答案

您是否在创建表(在数据库中)后添加关系?
如果您修改方案并再次运行程序,则需要 .sync({ force: true })。如果表在数据库中尚不存在,Sequelize 只会创建表及其所有引用。

在建立所有关联后是否调用同步?

你在使用 InnoDB 吗?

奇怪的是我可以重现,我认为最简单的解决方法是手动定义 key ,这就是我解决它的方法,可能是一个错误,否则我不确定。

看这里: http://sequelizejs.com/docs/latest/associations#block-3-line-24

关于node.js - 不创建带有 Sequelize 的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24309893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com