首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

TypeORM外键在查找调用中不显示

TypeORM是一个用于Node.js和TypeScript的ORM(对象关系映射)框架,它提供了一种方便的方式来操作数据库。在TypeORM中,外键是一种用于建立表之间关系的机制。然而,在查找调用中,TypeORM默认情况下不会显示外键的值,而只会显示外键的ID。

这种行为是由TypeORM的设计决策所决定的,目的是为了提高性能和减少数据传输量。当我们在查询数据时,TypeORM只会返回与外键相关的ID,而不会自动加载关联实体的详细信息。这样可以减少数据库查询的数量和数据传输的大小,提高查询性能。

如果我们想要在查找调用中显示外键的详细信息,我们可以使用TypeORM的关联加载功能。关联加载允许我们在查询数据时同时加载关联实体的详细信息。我们可以使用leftJoinAndSelectinnerJoinAndSelect方法来实现关联加载。

以下是一个示例代码,演示如何在TypeORM中使用关联加载来显示外键的详细信息:

代码语言:txt
复制
import { Entity, PrimaryGeneratedColumn, Column, BaseEntity, ManyToOne, createConnection } from "typeorm";

@Entity()
class User extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @ManyToOne(() => Role, role => role.users)
  role: Role;
}

@Entity()
class Role extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  description: string;

  @OneToMany(() => User, user => user.role)
  users: User[];
}

async function main() {
  const connection = await createConnection({
    type: "mysql",
    host: "localhost",
    port: 3306,
    username: "root",
    password: "password",
    database: "test",
    entities: [User, Role],
    synchronize: true,
  });

  const users = await connection.manager.find(User, { relations: ["role"] });
  console.log(users);
}

main().catch(error => console.error(error));

在上面的示例中,我们定义了两个实体类UserRole,它们之间通过外键关联。在main函数中,我们使用find方法查询User实体,并通过relations选项指定要加载的关联实体role。这样,在查询结果中就会包含外键role的详细信息。

需要注意的是,关联加载可能会导致性能下降,特别是在加载大量数据时。因此,在使用关联加载时,我们需要权衡性能和数据传输量之间的平衡。

推荐的腾讯云相关产品:腾讯云数据库MySQL、腾讯云云服务器CVM、腾讯云对象存储COS。

腾讯云数据库MySQL:https://cloud.tencent.com/product/cdb

腾讯云云服务器CVM:https://cloud.tencent.com/product/cvm

腾讯云对象存储COS:https://cloud.tencent.com/product/cos

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

django开发取消约束的实现

# setting设置 'OPTIONS': { "init_command": "SET foreign_key_checks = 0;", } 补充知识:django-给关系传值...,删除外关系 反查: 表关系里 related_name = ‘反查name’,自己设置,django也会默认设置为class的小写名字+_set , ex: book_set....''' 两种方法 教室ClassRoom和教室编号ClassNumber 字段django类里名(room_number)在数据库名(room_number_id) '''      # 一.1...字段django类里名(room_number)在数据库名(room_number_id)      c.save() return HttpResponse("ojbk") 多对一: 类似一对一...s.teacher.remove(x) return HttpResponse("ojbk") 以上这篇django实现在开发取消约束就是小编分享给大家的全部内容了,希望能给大家一个参考。

3.6K10

TypeORM用法浅析

开发,通常是指将数据库的表(关系模型)映射到编程语言中的对象(对象模型),ORM框架的作用就是帮助我们实现这种映射,以方便地程序中进行数据的存储和检索。...里显示的创建了User实体,第二种实体由typeorm隐式处理,数据赋值通过dto自动映射到实体。...多表联查TypeORM官方文档,实体关系实际上是通过mysql的实现的,先在entity实体代码上添加关系,再使用leftJoinAndSelect等进行关联查询。...因为有诸多限制不被推荐使用,因此实体关系等应该在应用层解决,可以使用以下方法,达到和相同的效果。...参考开始入门 | TypeORM 中文文档Database | NestJS - A progressive Node.js framework做个图书借阅系统(2) 数据库设计深入探讨:为何避免使用与级联操作

13721

基于 Nest.js+TypeORM 实战,项目已开源,推荐!

我们TypeORM如何实现user表和info之间这种对一对的关系呢?...从上面代码可以看出, 是通过@OneToOne装饰器来修饰的, 在装饰器需要指定对方entity的类型,以及指定对方entity的。...@JoinColumn 必须在且只关系的一侧的上, 你设置@JoinColumn的哪一方,哪一方的表将包含一个relation id和目标实体表的。记住,不能同时二者entity。...TypeORM处理“一对多”的关系时, 将一的主键作为多的,即@ManyToOne装饰的属性;这样建表时有最少的数据表操作代价,避免数据冗余,提高效率, 上面的实体关系会生成以下表: |...首先必须调用获取文件对象方法getFile判断当前文件是否已经腾讯云COS已存在,如果已经存在,直接返回结果, 反之进行上传, app.service.ts文件实现: import { CosService

10.7K41

node 数据库ORM框架TypeORM入门

浏览器中使用WebSQL (试用) TypeORM可以浏览器环境工作,并且试验性的支持WebSQL 如果在浏览器环境中使用TypeORM需要使用 npm i typeorm-browser 来替代...快速开始 TypeORM,数据库table都是从实体创建。 所谓实体其实就是用装饰器@Table装饰的一个model。...现在运行app,会新创建一个table,这个table有一个连接photo的: +-------------+--------------+----------------------------+...按上面说的,@JoinColumn只能在关系的一边使用来使这边做为关系的拥有者,关系拥有者在数据库里的表现就是拥有一个列。 取出关系对象的数据 现在来用一个查询来取出photo以及它的元信息。...译者注:拥有者即关系拥有者 也就是ManyToOne的那个字段存的是另一个对象的id。

8.8K20

【译】Nodejs最好的ORM - TypeORM

浏览器中使用WebSQL (试用) TypeORM可以浏览器环境工作,并且试验性的支持WebSQL 如果在浏览器环境中使用TypeORM需要使用 npm i typeorm-browser 来替代...快速开始 TypeORM,数据库table都是从实体创建。 所谓实体其实就是用装饰器@Table装饰的一个model。...现在运行app,会新创建一个table,这个table有一个连接photo的: +-------------+--------------+----------------------------+...按上面说的,@JoinColumn只能在关系的一边使用来使这边做为关系的拥有者,关系拥有者在数据库里的表现就是拥有一个列。 取出关系对象的数据 现在来用一个查询来取出photo以及它的元信息。...译者注:拥有者即关系拥有者 也就是ManyToOne的那个字段存的是另一个对象的id。

19.3K133

20. 精读《Nestjs》

3.1.1 定义实体 每个实体对应数据库的一张表,Typeorm 每次启动都会同步表结构到数据库,我们完全不用使用数据库查看表结构,所有结构信息都定义代码: @Entity() export class...})` 注册时的提示信息 // 如果插入失败,也会立刻返回失败 // 所以只需要处理正确情况 res.status(HttpStatus.OK).json(card); } 3.1.3 ...也是 Typeorm 的特色之一,通过装饰器语义化解释实体之间的关系,常用的有 @OneToOne @OneToMany @ManyToOne@ManyToMany 四种,比如用户表到评论表,是一对多的关系...使用 Typeorm 查询 User 时,会自动查询到其关联的评论,保存在 user.comments 。...3.2 部署 可以使用 Docker 部署 Mysql + Nodejs,通过 docker-compose 将数据库与服务都跑 docker ,内部通信。

3.9K20

精读《Prisma 的使用》

,唯一多出来的 posts 与 author 其实是弥补了数据库表关联直观的部分,将这些转化为实体对象,让操作时感受不到外或者多表的存在,具体操作时再转化为 join 操作。...数据库多对多关系一般通过第三张表实现,第三张表会存储两张表之间对应关系,所以如果要显式定义其实是这样的: model Post { id Int...的方式访问某些属性,但这背后生成的却是一系列未经优化(或者部分自动优化)的复杂 join sql,我们写这些 sql 时会提前考虑性能因素,但通过对象调用时却因为成本低,或觉得 ORM 有 magic...Prisma Schema 的好处 其实从语法上,Prisma Schema 与 Typeorm 基于 Class + 装饰器的拓展几乎可以等价转换,但 Prisma Schema 实际使用中有一个很不错的优势...实际使用,为了规避 ORM 产生笨拙 sql 导致的性能问题,可以利用 Prisma Middleware 监控查询性能,并对性能较差的地方采用 prisma.

3.5K30

混搭 TypeScript + GraphQL + DI + Decorator 风格写 Node.js 应用

同时这类成熟框架都能一搞定部署发布等流程,这样我们就可以将大部分时间用在业务代码上、而不是折腾环境搭建细节上。 第二个方面是业务代码的书写风格。...2.1 ORM 选型 除了直接拼 SQL 语句这种略微硬核的方式,Node.js 应用开发者更多地会选择使用开源的 ORM 库,如 Sequelize。...Typescript 天然的类型环境显得有些怪异,所以我个人更加倾向于用 TypeORM 。...一般推荐直接让 Controller 调用到 Model 对象,**而是要中间添加一层 Service 层来进行解耦(具体的优势详见 Egg.js 官方文档《服务(Service)》,里面有详细的解释...层其实也是调用 ORM 的实体方法 Article.findAndCount(由于我们是用** Active Records **模式的),这个 Article 类就是 ORM 的实体,其定义也非常简单

3.2K20

kz-admin后台管理系统

在这三张表关系如下(这里使用与数据库模型为例,实际项目并未用到外,也推荐使用) 用户-角色 与 角色-权限都采用的多对多的关系,即新创建一个表用于映射两表关系。...权限管理,最为重要的便是权限表了,由于这套后台管理系统还涉及到前端的左侧菜单,所以将这里的 permission 表替换为 menu 表,字段 permission 表示权限值。...前端菜单管理​ 获取所有的菜单列表数据,通过递归生成对应的菜单树结构,具体递归代码src/modules/core/permission/index.ts的generatorMenu方法。...auth.guard.ts 守卫获取 permission,然后每次请求需要鉴权的接口时,将权限标识转为接口 url,判断是否包含该 url,包含则无访问权限。...菜单管理页可操作菜单,具体可自测。 至此,菜单表的数据被拆分为这 3 部分数据,以实现权限管理,动态路由的目的。

1.9K20

NestJS、TypeORM 和 PostgreSQL 项目开发和数据库迁移完整示例(译)

您可以像这样添加所需的模块: npm install --save @nestjs/typeorm typeorm pg 配置管理 我们可以 Nest.js 配置 TypeORM 连接到哪个数据库服务器...typeORM 文档查找更多支持的数据注释。...1.typeORM CLI 的设置 我们已经 ConfigService 添加了所有必要的配置,但是 typeORM CLI 与 ormconfig.json 是同时生效的,所以我们希望与正式环境的...my_init.ts( typescript )并将其放入您项目的迁移文件夹。...但是,我建议您使用以下工作流程: 我们现在可以看到表在数据库创建。1. 我们项目中定义的项目表。2. 一个迁移表,在这个表 typeORM 跟踪已经在这个数据库上执行了哪个迁移。

5.3K30

NestJS、TypeORM 和 PostgreSQL 项目开发和数据库迁移完整示例(译)

您可以像这样添加所需的模块: npm install --save @nestjs/typeorm typeorm pg 配置管理 我们可以 Nest.js 配置 TypeORM 连接到哪个数据库服务器...typeORM 文档查找更多支持的数据注释。...1.typeORM CLI 的设置 我们已经 ConfigService 添加了所有必要的配置,但是 typeORM CLI 与 ormconfig.json 是同时生效的,所以我们希望与正式环境的...my_init.ts( typescript )并将其放入您项目的迁移文件夹。...但是,我建议您使用以下工作流程: 我们现在可以看到表在数据库创建。1. 我们项目中定义的项目表。2. 一个迁移表,在这个表 typeORM 跟踪已经在这个数据库上执行了哪个迁移。

5K10

NestJS、TypeORM 和 PostgreSQL 项目开发和数据库迁移完整示例(译)

您可以像这样添加所需的模块: npm install --save @nestjs/typeorm typeorm pg 配置管理 我们可以 Nest.js 配置 TypeORM 连接到哪个数据库服务器...typeORM 文档查找更多支持的数据注释。...1.typeORM CLI 的设置 我们已经 ConfigService 添加了所有必要的配置,但是 typeORM CLI 与 ormconfig.json 是同时生效的,所以我们希望与正式环境的...my_init.ts( typescript )并将其放入您项目的迁移文件夹。...但是,我建议您使用以下工作流程: 我们现在可以看到表在数据库创建。1. 我们项目中定义的项目表。2. 一个迁移表,在这个表 typeORM 跟踪已经在这个数据库上执行了哪个迁移。

6K21

使用NestJs、GraphQL、TypeORM搭建后端服务

TypeGraphQL是基于GraphQL重写的TypeScript版本,GraphQL的全称是:Graph Query Langue 图形化查询语言,是一个可由调用端定义API返回数据结构语言。...我们过去常用的RestFul API,我们可能在不同的业务需要调用同一个接口,但是各自所需的数据有不同的情况下,服务端为了同时满足两个需求则提供了更多的字段,这样导致了一个两个业务请求到的数据都包含了自己不需要的字段...image.png 3.2、改造app.module.ts 从@nestjs/typeorm引入NestJs与TypeORM连接模块*TypeOrmModule,然后传入一个Object作为与数据库链接的...此前有提到,NestJs里面万物皆是Module,所以这里的TypeORM也是作为一个子Module添加到整个服务。所以它的位置应该在imports这里。...结语 其实总体来说,整个NestJs应用的开发体验还是蛮好的,相关的生态也发展的比较成熟,本项目仅是对相关技术的一个整体尝试,实际开发过程遇到的还有很多别的问题,比如GraphQL的N+1查询问题,

6.5K10

有了 Prisma,就别用 TypeORM

findOne(undefined) 所查询到的却是第一条记录​ 首先 TypeORM 有个天坑,你可以 这个 Issue 查看详情或查看 这篇文章 是如何破解使用 TypeORM 的 Node.js...然后 service 上,注入 PrismaService 后,就可以通过 this.prisma[model] 来调用模型(实体) ,就像这样 import { Injectable } from...我举几个例子: TypeORM ,你需要 select 选择某个实体的几个字段,你可以这么写 你会发现 post 对象的类型提示依旧还是 postEntity,没有任何变化。...创建实体​ TypeORM ,假设你要创建一个 User 实体,你需要这么做 const newUser = new User() newUser.name = 'kuizuo' newUser.email...而是 Prisma Schema 定义模型。应用程序代码,您可以使用 Prisma Client 以类型安全的方式读取和写入数据库的数据,而无需管理复杂模型实例的开销。

1.1K21

使用 NextJS 和 TailwindCSS 重构我的个人博客

container --wrapper等; 2、Utility-First: 默认采用 rem 单位, 变量也就是16 的倍数, px-1是 16 的 1/4 也就是 4 px,我们不会写出13px、17px 等统一的单位变量...4、之前写了《使用 CSS variables 和Tailwind css实现主题换肤》也运用到了我的博客。...而文章内容写完之后是通常不变的,所以可以先将页面静态存储服务器上,这样就可以大大减小数据库压力。 getStaticProps 构建时请求数据。...useRouter } from 'next/router' function Post({ post }) { const router = useRouter() // 如果页面还没静态生成,则先显示下面的...1、MySQL 里有只有 utf8mb4 才能显示 emoji 的坑, Pg 就没这个坑; 2、Pg可以存储 array 和 json, 可以 array 和 json 上建索引; 代码编辑器 从上一版是

2.6K20

做了一个Nest.js上手项目,很丑,但适合练手和收藏

不知道为啥,慢慢开始喜欢上这种原始风味的 UI 样式了,写 CSS 也挺好看的。...专有变量 # 详情:https://typeorm.io/#/using-ormconfig # 生产环境服务器上的容器里配置 TYPEORM_CONNECTION=mariadb TYPEORM_DATABASE...=nest_todo TYPEORM_HOST=127.0.0.1 TYPEORM_PORT=3306 TYPEORM_USERNAME=root TYPEORM_PASSWORD=123456 TYPEORM_ENTITIES...遇事决 npm run migration:run + npm run db:seed 一下。 上传模块 从上面 Demo 可看到,Todo 是支持图片上传的,所以这里还需要提供上传功能。...我先给出这个项目的测试原则: 数据库操作不测,因为这个测试内容 TypeORM 能保证 API 的调用是 OK 的 简单实现不测,比如一个函数只有一行,那还测个 P 我只测一个模块,因为我懒,剩下大家自己看我那个模块的测试就能学会了

3.3K30

做了一个Nest.js上手项目,很丑,但适合练手和收藏

不知道为啥,慢慢开始喜欢上这种原始风味的 UI 样式了,写 CSS 也挺好看的。...专有变量 # 详情:https://typeorm.io/#/using-ormconfig # 生产环境服务器上的容器里配置 TYPEORM_CONNECTION=mariadb TYPEORM_DATABASE...=nest_todo TYPEORM_HOST=127.0.0.1 TYPEORM_PORT=3306 TYPEORM_USERNAME=root TYPEORM_PASSWORD=123456 TYPEORM_ENTITIES...遇事决 npm run migration:run + npm run db:seed 一下。 上传模块 从上面 Demo 可看到,Todo 是支持图片上传的,所以这里还需要提供上传功能。...我先给出这个项目的测试原则: 数据库操作不测,因为这个测试内容 TypeORM 能保证 API 的调用是 OK 的 简单实现不测,比如一个函数只有一行,那还测个 P 我只测一个模块,因为我懒,剩下大家自己看我那个模块的测试就能学会了

4.6K40

如何使用 NestJs、PostgreSQL、Redis 构建基于用户设备的授权验证

它将允许我们Redis缓存获取、设置、删除和重置 src 文件夹内创建一个名为 providers 的文件夹。...创建身份验证控制器 我们还没有创建一个控制器来调用我们的服务。 auth 文件夹内,创建文件 auth.controller.ts 。...注册路由 /auth/signup 从请求体获取用户详细信息,并调用 AuthServiceX 的 signUp() 函数,这是我们之前创建的身份验证服务的实例。...注意: line 36 ,我们将用户有效负载添加到请求对象。这样我们就可以路由处理程序访问它。我们将在本文的注销部分中看到这一点。...在上面的代码,我们调用了 del() 实例的 redisCacheService 方法。这将从包含用户设备详细信息的缓存删除用户的电子邮件

32120
领券