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

如何用TypeORM设置自定义id名称的多对多关系

TypeORM 是一个开源的对象关系映射(ORM)库,用于在 Node.js、浏览器、Ionic、Cordova 和 Electron 等平台上与数据库进行交互。它支持多种数据库,包括 MySQL、PostgreSQL、SQLite、Microsoft SQL Server 等。

要设置自定义id名称的多对多关系,可以按照以下步骤进行:

  1. 定义实体类(Entity Class):首先,需要定义两个实体类,分别表示多对多关系中的两个实体。例如,我们定义两个实体类 User 和 Role。
代码语言:txt
复制
@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @ManyToMany(() => Role)
  @JoinTable()
  roles: Role[];
}

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

  @Column()
  name: string;

  @ManyToMany(() => User, user => user.roles)
  users: User[];
}
  1. 设置自定义id名称:在实体类中,可以使用 @PrimaryGeneratedColumn() 装饰器来定义自动生成的id字段。如果要设置自定义id名称,可以使用 @PrimaryColumn() 装饰器,并指定名称和类型。
代码语言:txt
复制
@Entity()
export class User {
  @PrimaryColumn({ name: 'user_id', type: 'int' })
  userId: number;

  // ...
}

@Entity()
export class Role {
  @PrimaryColumn({ name: 'role_id', type: 'int' })
  roleId: number;

  // ...
}
  1. 配置多对多关系:在实体类中,使用 @ManyToMany() 装饰器来定义多对多关系。同时,使用 @JoinTable() 装饰器来指定关联表的名称和字段。
代码语言:txt
复制
@Entity()
export class User {
  // ...

  @ManyToMany(() => Role)
  @JoinTable({
    name: 'user_role',
    joinColumn: {
      name: 'user_id',
      referencedColumnName: 'userId',
    },
    inverseJoinColumn: {
      name: 'role_id',
      referencedColumnName: 'roleId',
    },
  })
  roles: Role[];
}

@Entity()
export class Role {
  // ...

  @ManyToMany(() => User, user => user.roles)
  users: User[];
}

在上述代码中,我们定义了一个名为 user_role 的关联表,并指定了关联字段的名称和类型。

  1. 使用 TypeORM 进行数据库操作:通过以上步骤定义好实体类和关系后,可以使用 TypeORM 提供的 API 进行数据库操作,例如查询、插入、更新等。
代码语言:txt
复制
// 创建用户和角色
const user = new User();
user.userId = 1;
user.name = 'John';

const role = new Role();
role.roleId = 1;
role.name = 'Admin';

user.roles = [role];

// 保存用户和角色到数据库
await connection.manager.save(user);

以上是使用 TypeORM 设置自定义id名称的多对多关系的步骤。在实际应用中,可以根据具体需求进行调整和扩展。如果想了解更多关于 TypeORM 的信息,可以访问腾讯云的 TypeORM 产品介绍页面

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

相关·内容

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

接下来探索一下如何用TypeORM创建一一、一关系。 一一 一一指是表中一条数据仅关联另外一个表中另一条数据。例如用户表和用户档案表, 一个用户只有一份档案。...关系中, 表A记录可能与表B中一个或多个记录相关联。例如,文章和标签你之间存在关系:一篇文章可以有多个标签, 一个标签页可以对应篇文章。...,TypeORM处理方式是,将其转化为两个一关系: 文章表 post 与 中间表 post_tag 一 标签表 tag 与中间表 post_tag 也是一 小结 前面我们学习了TypeORM...中是如何处理一一、一多以及关系,做一个简单总结。...@ManyToMany: 用于描述关系 @JoinColumn:定义关系哪一侧带外键连接列,可以自定义连接列名称和引用名称 @JoinTable:用于描述“关系, 并描述中间表表连接列

11.1K41
  • node 数据库ORM框架TypeORM入门

    到javascript对象属性 提供表一,一,一关系处理 还有更多 … 不同于其他JavaScript ORM,TypeORM使用是数据映射模式,可以很轻松创建出松耦合、可伸缩...一关系 来创建与另一个类关系。 新建PhotoMetadata.ts用来存photo元信息。...我们同样使用了@JoinColumn装饰器,这个装饰器可以指定一关系拥有者。 关系可以是单向或双向,但是只有一方是拥有者,加个这个装饰器就表示关系是给这个表服务。.../一关系 接下来显示一/一关系。...会自动移除相册里Photo }) @JoinTable() photos: Photo[] = []; // 初始化个Photo数组 } @JoinTable关系拥有者必须指定

    8.8K20

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

    后端开发同学应该都知道ORM全称是对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射元数据,将面向对象语言程序中对象自动持久化到关系数据库中...通过他我们可以定义一些Entity(实体),每个实体数据字段,每个字段包含了数据类型,甚至是数据关系(一一)。这些实体将映射到真实数据库中,创建真正数据表。...而数据字段和关系也就生成对应数据库表字段以及表字段与表字段关系。...传入一个字符串作为参数,这个名称将用于生成表名称,使用方式@Entity('table_name') Column:列装饰器,将一个字段声明为一个数据表一个字段,可以设置字段数据类型,基础校验方式...前后端分离应用登陆认证问题等等...TypeORM也并不是很完美的技术,当应用有比较复杂查询关系时候,效率会低下,相关代替产品有Sequelize,Prisma等等技术都可以代替掉。

    6.6K10

    20. 精读《Nestjs》

    3.1 Typeorm 有了如此强大后端框架,必须搭配上同等强大 orm 才能发挥最大功力,Typeorm 就是最好选择之一。...名称', length: 30, unique: true, }) name: string = 'nick'; } 通过 @Entity 将类定义为实体,每个成员变量对应表中每一列...至于类型,Typeorm 通过反射,拿到了类型定义,自动识别 id 为数字类型、name 为字符串类型,当然也可以手动设置 type 参数。...特色之一,通过装饰器语义化解释实体之间关系,常用有 @OneToOne @OneToMany @ManyToOne@ManyToMany 四种,比如用户表到评论表,是一关系,可以这样设置实体...在使用 Typeorm 查询 User 时,会自动外键查询到其关联评论,保存在 user.comments 中。

    4K20

    2024年Node.js精选:50款工具库集锦,项目开发轻松上手(三)

    TypeORM是一个为TypeScript和JavaScript设计强大对象关系映射(ORM)库,它旨在弥合代码中对象与关系数据库世界之间鸿沟。...灵活查询构建器:提供了类型安全方式构建复杂查询。 关系管理:支持多种数据库关系(一一、一),简化了数据建模。 迁移系统:通过迁移管理数据库模式更改,确保一致性和版本控制。...强大查询构建器:通过灵活且类型安全接口构建复杂查询。 关系管理:简化了各种数据库关系建模和处理,包括一一、一。...可配置:支持为特定偏好进行自定义设置。 广泛语言支持:适用于多种编程和标记语言。 编辑器集成:与大多数流行代码编辑器无缝工作。...express(); app.use(helmet()); // 应用所有默认安全头设置 自定义头部: app.use(helmet({ contentSecurityPolicy: false

    29610

    Nodejs相关ORM框架分析_2023-02-27

    后来又不想分析,因为我发现node这种野蛮生长,滋生这些ORM轮子比比皆是,远比我想象;后来又觉着可以写,作为一个java出身业余研究node就想通过javaORM框架来洞悉node这群ORM框架是非曲直...ORM框架 ORM框架:Object Relational Mapping,对象-关系-映射,所以说ORM框架就是用面向对象方式和目前关系型数据库做匹配,java开发者目前主流hibernate、...是项目的名称,database 是将使用数据库,TypeORM 支持多种数据库。...此外需要知道是,sequelize还默认为每个模型定义字段id(主键)、createdat和updatedat,也可以进行设置。...装饰类方式看着顺眼,但是整体构造也容易上手,操作简单,容易理解,看官网文档,功能覆盖强大,typeorm用户反馈使用问题比Sequelize要,后期用到再做比较。

    2K20

    Nodejs相关ORM框架分析

    后来又不想分析,因为我发现node这种野蛮生长,滋生这些ORM轮子比比皆是,远比我想象;后来又觉着可以写,作为一个java出身业余研究node就想通过javaORM框架来洞悉node这群ORM框架是非曲直...ORM框架ORM框架:Object Relational Mapping,对象-关系-映射,所以说ORM框架就是用面向对象方式和目前关系型数据库做匹配,java开发者目前主流hibernate、mybatis...闲话少说,直接用CLI 命令快速构建项目npm install typeorm -g创建项目typeorm init --name MyProject --database mysqlname 是项目的名称...此外需要知道是,sequelize还默认为每个模型定义字段id(主键)、createdat和updatedat,也可以进行设置。...装饰类方式看着顺眼,但是整体构造也容易上手,操作简单,容易理解,看官网文档,功能覆盖强大,typeorm用户反馈使用问题比Sequelize要,后期用到再做比较。

    1.3K30

    有了 Prisma,就别用 TypeORM

    只对这两个 ORM 框架从开发体验上进行对比,你也可以到 这里 查看 Prisma 官方这两个 ORM 框架对比。...当你使用 userRepository.findOne({ where: { id: null } }) 时,从开发者预期来看所返回结果应该为 null 才,但结果却是大跌眼镜,结果所返回是 user...再来看看 Prisma,你就会发现 post 对象类型提示信息才符合开发者预期。像这样细节在 Prisma 有非常。...user_ 前缀,这看上去有点不是那么合理,但如果考虑要联表查询情况下,就会存在相同名称字段,通过添加表名(别名)前缀就可以避免这种情况,这样来看貌似又有点合理了。...合理来说,Prisma 并不是一个传统 ORM,它工作原理并不是将表映射到编程语言中模型类,为处理关系数据库提供了一种面向对象方式。而是在 Prisma Schema 中定义模型。

    2K22

    TypeORM用法浅析

    本文以nestjs框架为例,nestjs和typeorm有着紧密集成,提供了开箱即用@nestjs/typeorm,更方便地进行数据库连接,实体管理和依赖注入,详细可查看文档Database。...sql场景,多表联查、分组聚合、子查询等;支持链式调用,使得代码更便于阅读和维护。...多表联查TypeORM官方文档中,实体关系实际上是通过mysql外键实现,先在entity实体代码上添加关系,再使用leftJoinAndSelect等进行关联查询。...,photo表内容作为userphotos属性,这样也直接体现了一关系。...photo和user是一,单个photo来看都会有对应一个user,因此可通过user表内部id来做关联,@Entity()class User { @PrimaryGeneratedColumn

    24521

    Nest.js 快速入门:实现 Mysql 单表 CRUD

    Nest.js 在国内外用都挺多,今天我们就来入门下吧:做一个笔记管理功能,实现 mysql 单表增删改查并提供 Restful 接口。...Typeorm 就是一个实现 orm 框架,可以通过装饰器来描述映射关系,比如 @Entity(实体)、@Column(列)、@PrimaryGeneratedColumn(主键 ID 自动生成) import...此外,Nest.js 提供了 IOC 容器,统一管理对象创建和依赖关系,根据声明来自动注入依赖。 两者结合就是通过 @nestjs/typeorm 包,它有两个静态方法用于生成 Module。...说了这么,大家可能还理解不是很清楚,那么我们就来做下笔记管理实战案例吧。 实战案例 Nest.js 样板代码比较多,自己写还是比较费事,@nestjs/cli 命令行工具这些做了自动化。...@Body 是把请求参数设置到对象属性上,被用来传递数据对象叫做 dto(data transfer object)。 再就是返回对象会被序列化成 JSON,不需要手动序列化。

    4.1K30

    适用于 JSTS ORM 框架:高质量、松耦合、可扩展 | 开源日报 No.271

    typeorm/typeormhttps://github.com/typeorm/typeorm Stars: 33.5k License: MIT TypeORM 是 TypeScript 和 JavaScript...TypeORM 核心目标是始终支持最新 JavaScript 特性,并提供额外功能,帮助您开发任何类型数据库应用程序——从具有少量表小型应用程序到具有多个数据库大型企业应用程序。...TypeORM 在很大程度上受到其他 ORM 影响, Hibernate、Doctrine 和 Entity Framework。 支持 TypeScript 和 JavaScript。...数据库特定列类型。 实体管理器。 存储库和自定义存储库。 清晰对象关系模型。 关联(关系)。 懒加载和急加载关系。 单向、双向和自引用关系。 支持多种继承模式。 级联。 索引。 事务。...它具有以下核心优势和特性: 支持平台编程,可以减少为不同平台编写和维护相同代码所需时间,并保留本地编程灵活性和优势。

    19810

    精读《Prisma 使用》

    Prisma Schema Primsa Schema 是在最大程度贴近数据库结构描述基础上,关联关系进行了进一步抽象,并且背后维护了与数据模型对应关系,下图很好说明了这一点: 可以看到,几乎与数据库定义一模一样...} 关联场景有 1v1, nv1, 1vn, nvn 四种情况,字段类型可以为定义 model 名称,并使用属性描述 @relation 定义关联关系,比如上面的例子,描述了 Commenct 与...@unique 设置字段值唯一。 @relation 设置关联,上面已经提到过了。 @map 设置映射,上面也提到过了。 @updatedAt 修饰字段用来存储上次更新时间,一般是数据库自带能力。...ManyToMany Prisma 在多关联关系描述上也下了功夫,支持隐式关联描述: model Post { id Int @id @default(autoincrement...数据库关系一般通过第三张表实现,第三张表会存储两张表之间外键对应关系,所以如果要显式定义其实是这样: model Post { id Int

    3.7K30

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

    当 Node.js Server 项目越来越大时,将数据和数据库整理规范是很难,所以从一开始就有一个好开发和项目设置开发项目的成功至关重要。...它是一个相当灵活框架,建立在 Express.js 基础上,可以让你在短时间内制作出 Node.js 服务,因为它集成了很多好功能(完全类型化支持、依赖注入、模块管理和更多)。...为了使过程更健壮,我们将为 docker 容器使用相同名称(脚本中 $SERVER var),并添加一个额外检查:如果有同名容器正在运行,那么将结束并删除它以确保干净状态。...以下是如何设置 typeORM CLI 最佳实践。...1.typeORM CLI 设置 我们已经在 ConfigService 中添加了所有必要配置,但是 typeORM CLI 与 ormconfig.json 是同时生效,所以我们希望与正式环境

    5.4K30

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

    当 Node.js Server 项目越来越大时,将数据和数据库整理规范是很难,所以从一开始就有一个好开发和项目设置开发项目的成功至关重要。...它是一个相当灵活框架,建立在 Express.js 基础上,可以让你在短时间内制作出 Node.js 服务,因为它集成了很多好功能(完全类型化支持、依赖注入、模块管理和更多)。...为了使过程更健壮,我们将为 docker 容器使用相同名称(脚本中 $SERVER var),并添加一个额外检查:如果有同名容器正在运行,那么将结束并删除它以确保干净状态。...以下是如何设置 typeORM CLI 最佳实践。...1.typeORM CLI 设置 我们已经在 ConfigService 中添加了所有必要配置,但是 typeORM CLI 与 ormconfig.json 是同时生效,所以我们希望与正式环境

    5.1K10

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

    由于本项目以后端为主,所以前端也只有这些东西: 后端 后端内容则比较多了,主要就是主角 Nest.js,以及非常模块: 下面例举几个我觉得比较重要模块来说说吧,当然下面都是一些代码片段,想了解更具体实现...我 测试策略 不一定正确,只能说是我目前想到比较好 测试策略 TodoService 进行测试,比较难点是 TypeOrm Repository 进行 Mock,这玩意我自己搞了一整天才搞通...=== 0)).toBeUndefined(); }); }); TodoController 单元测试,我觉得这个 class 没什么可测,因为里面的函数太简单了: const { mockTodos...schematics", "sourceRoot": "src", "compilerOptions": { "plugins": ["@nestjs/swagger"] } } 最后 还有非常模块没讲...如果你 Nest.js 也感兴趣,也想学一下它,不妨 Clone 一下我 nest-todo 这个项目,抄抄改改学一下吧。

    4.7K42

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

    由于本项目以后端为主,所以前端也只有这些东西: 后端 后端内容则比较多了,主要就是主角 Nest.js,以及非常模块: 下面例举几个我觉得比较重要模块来说说吧,当然下面都是一些代码片段,想了解更具体实现...我 测试策略 不一定正确,只能说是我目前想到比较好 测试策略 TodoService 进行测试,比较难点是 TypeOrm Repository 进行 Mock,这玩意我自己搞了一整天才搞通...=== 0)).toBeUndefined(); }); }); TodoController 单元测试,我觉得这个 class 没什么可测,因为里面的函数太简单了: const { mockTodos...schematics", "sourceRoot": "src", "compilerOptions": { "plugins": ["@nestjs/swagger"] } } 最后 还有非常模块没讲...如果你 Nest.js 也感兴趣,也想学一下它,不妨 Clone 一下我 nest-todo 这个项目,抄抄改改学一下吧。

    3.3K30
    领券