javascript - TypeGraphQl 是否自动格式化 SQL 查询?
问题描述
我将 typeorm 与 TypeGraphQl 结合使用。我想知道TypeGraphQl提供的SQL查询结果是什么
例如,如果我有一个包含很多列的用户表,并且我有这个简单的解析器。
@Resolver()
class UserResolver {
@Query(() => [User])
async user(): Promise<User[]> {
return await User.find();
}
}
在客户端,他们像这样请求用户数据
{
user{
id,
name
}
}
SQL 将向数据库运行什么。
这是这个吗
"SELECT * FROM USER";
或者这个
"SELECT id, name FROM USER";
如果它运行第一个 SQL,那么为什么我需要首先使用 GraphQl?不是休息更好。
或者如何根据用户请求制作动态 SQL?
解决方案
GraphQl 用于动态字段请求,例如假设您的数据库中有一个用户表,其中包含 Id_User、电子邮件、名称,并且您只想查询 Id_User
所以你的查询看起来像这样
{
GetUser{
id
}
}
如果在你的解析器中你这样做:
@Resolver()
class UserResolver {
@Query(() => [User])
async GetUser(): Promise<User[]> {
return await User.find();
}
}
Typeorm whit 生成如下查询:
"SELECT Id_User, Name, Email FROM USER"
即使您没有选择所有数据并且您的查询只有一个字段 typeorm 也会选择所有字段。
如果您想避免这种情况并且只想使用“Id_User 字段”发出请求,您需要知道解析器返回的字段是什么,而您使用 typegraphql 中的 @Info 装饰器会为此付出很多
此外,typeorm 有一个查询生成器功能,可以帮助您制作动态 SQL 语句
为什么 ?并且 REST 更好?,实际上 REST 你无法选择你想要的字段,GraphQl 是为这些问题而设计的,当你有一个 web、应用程序、桌面应用程序时,你需要对你制作 GraphQl API 的所有平台进行不同的查询,因为只有一个像GetUser这样的端点,您可以动态选择字段,不需要像rest api这样的两个或多个端点
推荐阅读
- service - Kibana 没有在 FreeBSD 上运行
- javascript - 如何使用映射的键值对将数组转换为javascript中的对象?
- python - 如何从 for 循环中给定列表的结果创建列表?
- ios - Objective-C 中的“@TRUE”
- opengl-es-2.0 - 渲染图像的白屏闪烁
- angular - 如何将 ngFor 和 ngIf 放入 MAT-Table
- mysql - 我无法让这个 MySQL 过程像我想要的那样工作(语法错误)
- typescript - 如何获得 Object.keys(o) 的正确返回类型
- python - python导入父文件夹和子文件夹同名
- oauth-2.0 - 如何在 apache 归档中集成 Oauth2.0