0

我正在使用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;

仔细查看,发现每次都是用cidvalue来查询presentations,也就是说只有当他们碰巧共享相同的id值时,才能返回一些东西。即使对于那些,它也不正确。

我强烈怀疑,Sequelize 没有使用我指定的 joinTable,而是仍在尝试在原始两个表中查找外键。它被pid视为演示文稿中的参考cid,这导致了这个问题。

所以我想知道如何正确设置联结表,以便他们两个可以正确使用外键。

4

2 回答 2

0
jointTableName : 'course_presentations'

应该是(没有在)

joinTableName : 'course_presentations'
于 2013-11-05T10:37:21.993 回答
0

实际上,AFAIK - 这种关系不是“纯粹的”一对多。

您有一门课程可以在 course_presenation 表中有多个条目,并且 course_presentation 与演示文稿具有一对一的关系。如果是这样,只需在模型中定义那种关联。

于 2016-05-20T13:39:29.520 回答