我正在使用Sequelize,但由于除了 node.js 之外我还有其他服务器运行,我需要让它们共享数据库。所以在定义一对多关系的时候,我需要让Sequelize使用旧的现有jointTable。
我将关联的定义写如下,其中pid
的主键是presentations
:
this.courses.hasMany(this.presentations,
{as : 'Presentations',
foreignKey : 'cid',
joinTableName : 'course_presentations'
});
或者这个:
this.courses.hasMany(this.presentations,
{as : 'Presentations',
foreignKey : 'pid',
joinTableName : 'course_presentations'
});
我正在使用以下代码来检索相关的演示文稿:
app.get('/courses/presentations/:cid', function (req, res){
var cid = req.params.cid;
app.models.courses.find({where: {cid:cid}}).success(function(course){
course.getPresentations().success(function(presentations){
res.send(presentations);
});
});
});
上一个会告诉我的there is no cid in 'presentations' table
。
后者将给出如下内容:
Executing: SELECT * FROM `courses`;
Executing: SELECT * FROM `courses` WHERE `courses`.`cid`='11' LIMIT 1;
Executing: SELECT * FROM `presentations` WHERE `presentations`.`pid`=11;
仔细查看,发现每次都是用cid
value来查询presentations
,也就是说只有当他们碰巧共享相同的id值时,才能返回一些东西。即使对于那些,它也不正确。
我强烈怀疑,Sequelize 没有使用我指定的 joinTable,而是仍在尝试在原始两个表中查找外键。它被pid
视为演示文稿中的参考cid
,这导致了这个问题。
所以我想知道如何正确设置联结表,以便他们两个可以正确使用外键。