Sequelize BelongsToMany self reference inverse SQL QUERY

Sequelize BelongsToMany self reference inverse SQL QUERY

大家好希望你今天过得愉快。我已经在互联网上搜索过了,这是我最后的希望。希望一些美丽的灵魂会向我解释为什么会这样,因为我无法从文档或堆栈上的其他问答中理解这种情况。

案例有点简单: 简而言之,我得到了相反的 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);
      });

我希望从 parent 实例中获得所有孩子。是对的吗 ?相反,我从特定的 KID id 中得到相反的所有 parents。

 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;**

并记下这一行:

user.id = kids_parents.parent AND kids_parentskid = 2;

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

我在休息并重新分析 documentation.Find 后发现关联上的 foreignKey: 属性与 相关source 实例和 NOT 到目标 BUT 这对我来说是令人困惑的部分) as: 属性与 target 实例相关,与源无关。

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() 按预期工作!