ThinkSSL🔒 一键申购 5分钟快速签发 30天无理由退款 购买更放心 广告
[TOC] ## 快速入门 ``` import { Entity, PrimaryGeneratedColumn, Column } from "typeorm" @Entity() export class User { @PrimaryGeneratedColumn() id: number @Column() firstName: string @Column() lastName: string @Column() isActive: boolean } ``` ## 主列 ``` @PrimaryColumn() 创建一个主列,它采用任何类型的任何值 @PrimaryGeneratedColumn() 创建一个主列,该列的值将自动生成并具有自动增量值。它将创建带有int的列 @PrimaryGeneratedColumn("uuid") 创建一个主列,其值将自动生成uuid ``` ## 特殊列 ``` @CreateDateColumn 是自动设置为实体的插入日期的特殊列。您不需要设置此列 - 它会自动设置。 @UpdateDateColumn 是一个特殊的列,每次调用save实体管理器或存储库时,它都会自动设置为实体的更新时间。您不需要设置此列 - 它会自动设置。 @DeleteDateColumn 是一个特殊的列,每次调用实体管理器或存储库的软删除时,都会自动设置为实体的删除时间。您不需要设置此列 - 它会自动设置。如果设置了@DeleteDateColumn,则默认范围将为“未删除”。 @VersionColumn 是一个特殊的列,每次调用实体管理器或存储库时,它都会自动设置为实体的版本(递增的数字)save。您不需要设置此列 - 它会自动设置。 ``` ## 列类型 ``` @Column("int") @Column({ type: "int" }) @Column("varchar", { length: 200 }) @Column({ type: "int", width: 200 }) ``` ## simple-json列类型 以存储任何可以通过 JSON.stringify 存储在数据库中的值 ``` @Entity() export class User { @PrimaryGeneratedColumn() id: number @Column("simple-json") profile: { name: string; nickname: string } } ``` ## 具有生成值的列 ``` @Entity() export class User { @PrimaryColumn() id: number @Column() @Generated("uuid") uuid: string } ``` 除了“uuid”之外,还有“increment”、“identity”(仅限 Postgres 10+)和“rowid”(仅限 CockroachDB)生成类型 ## 列选项 ``` @Column({ type: "varchar", length: 150, unique: true, // ... }) name: string; ``` ## 实体继承 ``` export abstract class Content { @PrimaryGeneratedColumn() id: number @Column() title: string @Column() description: string } @Entity() export class Photo extends Content { @Column() size: string } @Entity() export class Question extends Content { @Column() answersCount: number } @Entity() export class Post extends Content { @Column() viewCount: number } ``` ## 邻接表 ``` import { Entity, Column, PrimaryGeneratedColumn, ManyToOne, OneToMany, } from "typeorm" @Entity() export class Category { @PrimaryGeneratedColumn() id: number @Column() name: string @Column() description: string @ManyToOne((type) => Category, (category) => category.children) parent: Category @OneToMany((type) => Category, (category) => category.parent) children: Category[] } ``` ## 生成tree ``` import { Entity, Tree, Column, PrimaryGeneratedColumn, TreeChildren, TreeParent, TreeLevelColumn, } from "typeorm" @Entity() @Tree("nested-set") export class Category { @PrimaryGeneratedColumn() id: number @Column() name: string @TreeChildren() children: Category[] @TreeParent() parent: Category } const a1 = new Category() a1.name = "a1" await dataSource.manager.save(a1) const a11 = new Category() a11.name = "a11" a11.parent = a1 await dataSource.manager.save(a11) const a12 = new Category() a12.name = "a12" a12.parent = a1 await dataSource.manager.save(a12) const a111 = new Category() a111.name = "a111" a111.parent = a11 await dataSource.manager.save(a111) const a112 = new Category() a112.name = "a112" a112.parent = a11 await dataSource.manager.save(a112) const trees = await dataSource.manager.getTreeRepository(Category).findTrees() console.log(JSON.stringify(trees)); // [{"id":1,"name":"a1","children":[{"id":2,"name":"a11","children":[{"id":4,"name":"a111","children":[]},{"id":5,"name":"a112","children":[]}]},{"id":3,"name":"a12","children":[]}]}] ``` 常用函数 ``` .findTrees() // tree结构 .findTrees({ depth: 2 }) //输出层级为2 .findRoots() // 获取根节点 .findDescendants(parentCategory) //给定实体的所有后代,将它们全部返回到平面数组中 .findDescendantsTree(parentCategory) //获取给定实体的所有孩子(后代)。将它们返回到树中 - 彼此嵌套 .findAncestors(childCategory) //获取给定实体的所有父母(祖先)。将它们全部返回到平面数组中。 .findAncestorsTree(childCategory) //获取给定实体的所有父母(祖先)。将它们返回到树中 - 彼此嵌套。 .countAncestors(childCategory) //获取实体的祖先数量。 ```