Как связать таблицу с самой собой

#graphql #sequelize.js #many-to-many #associations #apollo

#graphql #sequelize.js #many-to-many #associations #apollo

Вопрос:

В настоящее время я работаю над собственным приложением react и решил использовать graphql и сиквелировать для своего бэкенда. Я столкнулся с проблемой, которая сводит меня с ума, потому что я не понимаю, почему это произошло. Я создал несколько моделей : Пользователь, Интерес, Событие, и некоторые из них я связываю как Событие с Пользователем. Все было в порядке, когда я запросил свою базу данных в песочнице apollo, у меня были все ответы, которые мне были нужны. Но вот в чем проблема, я должен связать пользователя с другим пользователем (чтобы позволить им быть «друзьями», и из того, что я видел в базе данных, создается ассоциация (я проверяю таблицу user_has_friends, и у меня есть идентификатор пользователя и идентификатор друга, как и ожидалось.

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

Это часть моего кода, которая может помочь решить проблему :

Схема

 type User {  id: ID!  google_id:String!  first_name:String!  last_name:String!  email:String!  city:String!  phone: String!  gender: String!  age: Int!  nbr_friend: Int!  latitude: Float!  longitude:Float!  interests:[Interest]  events:[Event]  friends:[User] }  type Event {  id: ID!,  title:String!,  description:String!  location:String!  date:String!  picture:String!  creator:String!  users:[User]  type Mutation{ addUserToEvent(eventId:ID!, userId:ID!): Event! addFriendToUser(user_id: ID!, friend_id:ID!) : User! }   

Распознаватель

 async addFriendToUser(root, args, { models }) {  return User.findByPk(args.user_id).then(user =gt; {  return User.findByPk(args.friend_id).then(friend =gt; {  user.addUser(friend);  return user.save()  })  })  },    async addUserToEvent(root, args) {  console.log(args.userId, args.eventId, args, 'args')  return Event.findByPk(args.eventId).then(event =gt; {  console.log(event, 'event');  return User.findByPk(args.userId).then(user =gt; {  console.log(user, 'user')  event.addUser(user);  return event.save()  })  })  },   

Model association

 User.belongsToMany(Event, {  through: "event_has_user",  foreignKey: "event_id",  otherKey: "user_id",  timestamps: false,  as: "event"   });   Event.belongsToMany(User, {  through: "event_has_user",  foreignKey: "user_id",  otherKey: "event_id",  timestamps: false,  as: "user"   });   User.belongsToMany(User, {  through: "user_is_friend_with",  foreignKey: "user_id",  otherKey: "friend_id",  timestamps: false,  as: "user"   });   User.belongsToMany(User, {  through: "user_is_friend_with",  foreignKey: "friend_id",  otherKey: "user_id",  timestamps: false,  as: "friend"   });  

Database

 CREATE TABLE "user_is_friend_with" (  "user_id" INT NOT NULL,  "friend_id" int NOT NULL,   PRIMARY KEY("user_id", "friend_id") );  CREATE TABLE "event_has_user" (  "event_id" int NOT NULL,  "user_id" INT NOT NULL,   PRIMARY KEY("event_id", "user_id") );  

Query apollo enter image description here

I don’t understand the null value in the query response for friend value. I did excatly the same as for interests and events, for them it works but for friend it doesn’t …