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_parents
。 kid
= 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() 按预期工作!
大家好希望你今天过得愉快。我已经在互联网上搜索过了,这是我最后的希望。希望一些美丽的灵魂会向我解释为什么会这样,因为我无法从文档或堆栈上的其他问答中理解这种情况。
案例有点简单: 简而言之,我得到了相反的 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_parents
。 kid
= 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() 按预期工作!