#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 …