[英]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.