TypeORM 是一个用于 Node.js 的 ORM(对象关系映射)库,它允许开发者以面向对象的方式操作数据库。通过 TypeORM,你可以定义实体(Entities)和它们之间的关系,然后自动生成相应的数据库表和关系。
在 TypeORM 中,常见的关系类型包括:
假设我们有三个实体:User
、Group
和 GroupMetaData
。我们希望创建以下关系:
User
可以属于多个 Group
(多对多)Group
可以有多个 GroupMetaData
(一对多)import { Entity, PrimaryGeneratedColumn, Column, ManyToMany, JoinTable } from 'typeorm';
import { Group } from './Group';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@ManyToMany(() => Group, group => group.users)
@JoinTable()
groups: Group[];
}
import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from 'typeorm';
import { User } from './User';
import { GroupMetaData } from './GroupMetaData';
@Entity()
export class Group {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@OneToMany(() => GroupMetaData, metaData => metaData.group)
metaData: GroupMetaData[];
@ManyToMany(() => User, user => user.groups)
users: User[];
}
import { Entity, PrimaryGeneratedColumn, Column, ManyToOne } from 'typeorm';
import { Group } from './Group';
@Entity()
export class GroupMetaData {
@PrimaryGeneratedColumn()
id: number;
@Column()
key: string;
@Column()
value: string;
@ManyToOne(() => Group, group => group.metaData)
group: Group;
}
这种关系模型适用于以下场景:
原因: 可能是由于实体定义中的关系配置不正确,或者数据库迁移未正确执行。
解决方法:
npx typeorm migration:run
原因: 可能是由于查询语句不正确,或者关系配置未正确加载。
解决方法:
join
或 createQueryBuilder
进行关联查询。const users = await userRepository.find({
relations: ['groups', 'groups.metaData']
});
import 'reflect-metadata';
import { createConnection } from 'typeorm';
import { User } from './entity/User';
import { Group } from './entity/Group';
import { GroupMetaData } from './entity/GroupMetaData';
createConnection({
type: 'sqlite',
database: ':memory:',
entities: [User, Group, GroupMetaData],
synchronize: true,
}).then(connection => {
// 应用逻辑
}).catch(error => console.log(error));
通过以上步骤,你可以使用 TypeORM 为 User
、Group
和 GroupMetaData
创建关系,并解决常见的相关问题。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云