Sequelize BelongsToMany自引用反向SQL QUERY

时间:2018-06-02 07:21:53

标签: node.js express orm sequelize.js has-and-belongs-to-many

大家好,希望你这一天很棒。我在互联网上搜索过,这是我最后的希望。希望一些美丽的灵魂会向我解释为什么会发生这种情况,因为我无法从文件或其他Q& A中抓住这里的堆栈溢出这种情况的光。

案件很简单: 简而言之,我得到了反向SQL查询。

我有这个自我引用协会:

User.belongsToMany(User, {as: 'parents', through: 'kids_parents',foreignKey: 'parent', otherKey: 'kid'}); 
User.belongsToMany(User, {as: 'kids', through: 'kids_parents', foreignKey: 'kid',otherKey: 'parent'});

然后在我的控制器中我有这个:

User.findById(2).then((parent) => {
      parent.getKids().then((kids)=> {
          console.log(kids);
      });

我希望从父实例中获取所有孩子。是对的吗 ?相反,我从特定的KID id获得了相反的所有父母。

 SELECT `user`.`id`, `user`.`name`, `user`.`surname`, `user`.`username`,  `kids_parents`.`id` AS `kids_parents.id`, `kids_parents`.`kid` AS `kids_parents.kid`, `kids_parents`.`parent` AS `kids_parents.parent` FROM `users` AS `user` INNER JOIN `kids_parents` AS `kids_parents` ON **`user`.`id` = `kids_parents`.`parent`** AND **`kids_parents`.`kid` = 2;**

并注意这一行:

userid = kids_parentsparent kids_parentskid = 2

有人可以解释为什么会这样吗?我在这里错过了什么?感谢您的关注。

1 个答案:

答案 0 :(得分:2)

我在休息并重新分析文档后弄清楚。发现该关联的 foreignKey:属性与实例和不到目标但是,这对我来说是令人困惑的部分 as:属性与目标实例,而不是源。

User(Kid).belongsToMany(User(Parents), {as:(target) 'parents', through: 'kids_parents',foreignKey(source): 'parent' (wrong!!!), otherKey: 'kid'}); 

所以代替上面的那行,应该是:

User.belongsToMany(User, {as: 'parents', through: 'kids_parents',foreignKey: 'kid' , otherKey: 'parent'}); 

User.belongsToMany(User, {as: 'kids', through: 'kids_parents', foreignKey: 'parent',otherKey: 'kid'});

现在,parent.getKids()按预期工作!