Sequelize BelongsToMany самостоятельная ссылка обратный SQL QUERY - PullRequest
0 голосов
/ 02 июня 2018

Привет всем, надеюсь, ваш день будет отличным.Я искал по всему интернету и вот моя последняя надежда.Надеюсь, какая-то прекрасная душа объяснит мне, почему это происходит, потому что я не мог понять из документации или других вопросов и ответов здесь, в стеке, переполнение света в этой ситуации.

Случай довольно прост: Короче, яполучение обратного 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.

 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 И kids_parents. kid = 2;

Может кто-нибудь объяснить, почему это происходит?Что мне здесь не хватает?Спасибо за внимание.

1 Ответ

0 голосов
/ 02 июня 2018

Я выяснил это после отдыха и повторного анализа документации. Выясните, что атрибут foreignKey: в ассоциации относится к экземпляру source и NOT до цели НО (, и это меня сбило с толку ), атрибут 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 () работает как положено!

...