簡體   English   中英

如何使用type-graphql獲取graphQL類型的映射類型名稱

[英]How can I get mapped type names for a graphQL type using type-graphql

好的,所以我開始深入研究graphql,並且我使用koa,type-graphql和sequelize-typescript構建了一個api。 一切正常。...我設法使查詢正常工作,甚至設法通過使用graphql-fields過濾了我在數據庫中查詢的列來進行了一些優化...但是,當我為字段名加上別名時,我似乎無法獲得映射的名稱.....

例如,給定以下ObjectType / Sequelize模型。

export interface IDepartment {
    departmentId: number;
    name: string;
    description: string;
}

@ObjectType()
@Table({ underscored: true })
export class Department extends Model<Department> implements IDepartment {
    @Field({ name: 'id' })
    @PrimaryKey
    @Column({ field: 'department_id'})
    public departmentId: number;

    @Field()
    @Length({ max: 100 })
    @Column
    name: string;

    @Field()
    @Length({ max: 100 })
    @AllowNull
    @Column
    description: string;
}

和樣本查詢....

    query {
    department(name: "Test Dept") {
        id
        name,
        description
    }
}

樣品解析器......

async department(@Arg('name') name: string, @Info() info: GraphQLResolveInfo) {
        return Department.findOne({
            where: { name }
        });
    }

這工作得很好....但是當我這樣做

async department(@Arg('name') name: string, @Info() info: GraphQLResolveInfo) {
    let fields = Object.keys(getFields(info))
    return Department.findOne({
        attributes: fields,
        where: { name }
    });
}

(getFields是graphql-fields),它會失敗,因為查詢指定了字段名稱id(即graphql-fields返回的內容),但列名是department_id(將模型名稱命名為departmentId)。

我已經用細齒梳仔細瀏覽了該架構,使用了introspectionFromSchema函數來查看我的架構的詳細副本,但是在任何地方都沒有提到departmentId或department_id。...但是我知道它在那里,因為當我從我的sequelize查詢中排除屬性字段,即使sequelize返回departmentId作為屬性名稱,當我從解析器返回它並且它到達客戶端時,屬性名稱是id。

任何幫助將不勝感激....我試圖通過僅獲取所請求的屬性而不是整個對象來優化所有內容。 我總是可以將地圖存儲為單獨的常量並在我的@Field定義中使用它們,但是我想這樣做是最后的手段,但是如果我可以盡量保持代碼盡可能精簡....

謝謝大家。

不幸的是, name選項主要是為了支持解析器繼承而引入的。 使用它來映射架構字段名稱是一種未記錄的功能,因此它不提供任何映射或公開映射元數據。

對輸入或args類型使用name選項會更糟糕 - 它將導致無法訪問字段並且屬性未定義。

現在我的建議是保持簡單,不要映射字段名稱,直到適當的修復程序到達。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM