[英]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;
/*...*/
}
联接列始终是对某些其他列的引用(使用外键)。 默认情况下,您的关系始终引用相关实体的主列。 如果要与相关实体的其他列创建关系 - 您也可以在 @JoinColumn 中指定它们:
@ManyToOne(type => Category)
@JoinColumn({ referencedColumnName: "name" })
category: Category;
关系现在指的是类别实体的名称,而不是 id。 该关系的列名将成为 categoryName。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.