【问题标题】:Dynamic Filters for Graphql Queries with TypeOrm使用 TypeOrm 的 Graphql 查询的动态过滤器
【发布时间】:2021-02-26 10:17:08
【问题描述】:

我正在使用 Apollo、typescript 和 TypeOrm 创建一个 graphQL 查询。目前我只有一张名为 users 的表。然后我有一个 getUsers graphql 查询。使用 typeOrm,我使用 find() 方法在解析器中返回用户。我的问题是 typeOrm 或 Apollo 中有一种方法可以对用户设置可选过滤器,因此我可以传入可选的 id 或不传入任何内容以返回同一查询中的所有用户。哪些选项可用于接受本质上可选的过滤器,而无需进行多个查询。谢谢。

我想使用的查询

query noFilters {
  getUsers {
    id
    firstName
  }
}
## return all users

query withFilters {
  getUsers (filters: {id: [1]}) {
    id
    firstName
  }
}
## return just user with ID of 1

用户实体

import {Entity, PrimaryGeneratedColumn, Column, BaseEntity} from "typeorm";

@Entity()
export class User extends BaseEntity{

    @PrimaryGeneratedColumn({name: "user_id"})
    id: number;

    @Column({name: "first_name" })
    firstName: string;
}

解析器

export const resolvers = {
  Query: {
    getUsers: async (_: any, args: any) => {
      const { id } = args;

      return await User.find({where: {}});
    }
  }
};

类型

export const typeDefs = gql`
  type Query {
    getUsers(id: [Int!]): [User]
  }

  type User {
    id: Int!
    firstName: String!
  }
`;

【问题讨论】:

    标签: typescript express graphql apollo typeorm


    【解决方案1】:

    试试这样:

    export const resolvers = {
      Query: {
        getUsers: async (_: any, args: any) => {
          const { id, where } = args;
    
           if (args.where){
               where = args.where;
           }
    
          return await User.find({where: where});
        }
      }
    };
    

    【讨论】:

      猜你喜欢
      • 2021-05-11
      • 2019-01-22
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 2020-03-19
      • 2018-08-29
      相关资源
      最近更新 更多