【发布时间】:2021-10-17 09:21:59
【问题描述】:
我正在与 TypeORM 和 MySQL 以及 Express 建立多对一、一对多关系。有两张表cold post和user。 一个用户有很多帖子。每个帖子都有一个用户。 我想使用 '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))
})
【问题讨论】:
标签: javascript node.js reactjs express typeorm