繁体   English   中英

TypeORM 关系和表达

[英]TypeORM relations and express

我正在与 TypeORM 和 MySQL 以及 Express 建立多对一、一对多关系。 有两个表冷帖和用户。 一个用户有很多帖子。 每个帖子都有一个用户。 我想使用“userUuid”列作为外键来连接这两个表。 谁能告诉我如何修复它?

谢谢

// 用户

 import {
        Entity,
        PrimaryGeneratedColumn,
        Column,
        BaseEntity,
        BeforeInsert,
        Generated,
        OneToMany,
        } from 'typeorm'
        import { v4 as uuid } from 'uuid'
    
        import { Post } from './Post'
        @Entity()
        export class User extends BaseEntity {
        @PrimaryGeneratedColumn()
        id!: number
      
        @Column()
        userId!: string
      
        @Column()
        @Generated('uuid')
        userUuid!: string
      
        @Column({ nullable: true })
        displayName!: string
        
        @Column({ nullable: true })
        email!: string
      
        @OneToMany(() => Post, (post: Post) => post.user)
        posts!: Post[]
      
        @BeforeInsert()
        createUuid() {
          this.userUuid = uuid()
        }
      
        toJSON() {
          return { ...this, id: undefined }
        }
      }

// 邮政

 import {
        Entity,
        PrimaryGeneratedColumn,
        CreateDateColumn,
        UpdateDateColumn,
        Column,
        BaseEntity,
        Generated,
        BeforeInsert,
        ManyToOne,
        JoinColumn,
      } from 'typeorm'
      import { v4 as uuid } from 'uuid'
      import { User } from './User'
      @Entity()
      export class Post extends BaseEntity {
        @PrimaryGeneratedColumn()
        id!: number
      
        @Column()
        @Generated('uuid')
        postUuid!: string
      
        @Column({ nullable: true })
        userUuid!: string
      
        @CreateDateColumn({ nullable: true })
        createdAt!: Date
      
        @UpdateDateColumn({ nullable: true })
        updatedAt!: Date
      
        @Column({ nullable: true })
        content!: string
      
        @BeforeInsert()
        createUuid() {
          this.postUuid = uuid()
        }
      
        @ManyToOne(() => User, (user: User) => user.posts)
        user!: User
      
        @JoinColumn([{ name: 'userUuid' }, { referencedColumnName: 'userUuid' }])
        toJSON() {
          return { ...this, id: undefined }
        }
      }

//表达

router
  .route('/')
  .get((req: Request, res: Response) => {
    User.find({ relations: ['posts'] })
      .then((data) => {
        res.send(data)
      })
      .catch((err) => res.send(err))
  })

//表达

router
  .route('/')
  .get((req: Request, res: Response) => {
    Post.find({ relations: ['user'] })
      .then((data) => {
        res.send(data)
      })
      .catch((err) => res.send(err))
  })         

似乎您需要使用JoinColumn装饰器。

class Post /*...*/ {
  /*...*/
  @ManyToOne(() => User)
  @JoinColumn({ referencedColumnName: "userUuid" })
  userUuid!: string;
  /*...*/
}

来自 TypeORM 文档

联接列始终是对某些其他列的引用(使用外键)。 默认情况下,您的关系始终引用相关实体的主列。 如果要与相关实体的其他列创建关系 - 您也可以在 @JoinColumn 中指定它们:

@ManyToOne(type => Category)
@JoinColumn({ referencedColumnName: "name" })
category: Category;

关系现在指的是类别实体的名称,而不是 id。 该关系的列名将成为 categoryName。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM