TypeORM-通过解析器中的关系查询检索数据

时间:2019-04-22 07:02:51

标签: graphql apollo typeorm

因此,我正在尝试从Apollo解析器的联接关系中检索元素。

我有一个用户表,一个通知表。还有一个名为Relation的表:

notification_recipients_user由两个实体上的ManyToMany关系定义,但托管在Notification上:

//entity/Notification.ts
  @ManyToMany(type => User, recipient => recipient.notifications)
  @JoinTable()
  recipients: User[];

通过这种突变,我可以毫无问题地建立联系:

    addNotificationForUser: async (_, { id, data }) => {
      const user = await User.findOne({ id });
      if (user) {
        const notification = await Notification.create({
          template: data,
          recipients: [user]
        }).save()
        return notification;
      } else {
        throw new Error("User does not exists!");
      }
    }

但是我无法完全检索特定用户的数据。

    allNotificationsOfUser: (_, { user }, ___) => {
      return Notification.find({
        where: { userId: user },
        relations: ['recipients'],
      })

enter image description here

查找方法是TypeORM本机方法之一。

但是我必须做错什么,因为它的反应就像没有任何过滤器一样。

1 个答案:

答案 0 :(得分:0)

好吧,最好的方法是使用实​​体之间的关系。

因此,要获取通知,您将按User.notifications

allUnseenNotificationsOfUser: async (_, { userId }, __) => {
  const user = await User.findOne({
    relations: ["notifications"],
    where: { id: userId }
  });
  if (user) {
    const notifications = user.notifications.filter(notification => !notification.seen)
    return notifications;
  }
  return null;
}

对于任何对此anyone之以鼻的记录,您可以在结果上使用过滤器来进行类似解析器的查询。

const notifications = user.notifications.filter(notification => !notification.seen)

感觉很棘手,但就像一个魅力。