Nestjs 如何正确映射 2 tables 与中间 table
Nestjs how to properly map 2 tables with a middle table
我正在使用 Postgres
因为数据库有下一个表:
学生
id: Integer (PK)
name: Text
主题
id: Integer (PK)
name: Text
student_assignation
student_id: Integer (PK)
subject_id: Integer (PK)
那些表没有 Auto-generated PK
。
所以,我的实体是:
Student.entity.ts
import { Entity, Column, PrimaryGeneratedColumn, OneToMany, PrimaryColumn } from 'typeorm';
import { student_assignation } from './student_assignation.entity';
import { Subject } from './subject.entity';
@Entity()
export class Student {
@Column('number')
@PrimaryColumn()
id: number;
@Column('text')
name: string;
@OneToMany(type => student_assignation, x => x.subject_id)
//student_assignations: student_assignation[];
}
好吧,这是我的问题:
我正在尝试将所有主题分配给用户。
在 SQL
术语中,我将其定义为:
SELECT
u.id, u.name, r.id, r.name
FROM
student u INNER JOIN student_assignation ra
ON u.id = ra.student_id
INNER JOIN subject r
ON r.id = ra.subject_id
WHERE
u.id = 1
但是目前在nestjs中转换使用,我有这样的关系:
@OneToMany(type => student_assignation, x => x.subject_id)
@ManyToOne(type => subject, x => x.id)
但是,没有检索到任何信息。
您需要多对多关系。查看 TypeOrm 实现 here
您必须在 many-to-many
关系中实现您的实体:
@Entity()
export class Student {
@Column('number')
@PrimaryColumn()
id: number;
@Column('text')
name: string;
@ManyToMany(type => Subject)
@JoinTable({ name: 'student_assignation' })
subjects: Subject[];
}
@Entity()
export class Subject {
@PrimaryColumn()
id: number;
@Column()
name: string;
@ManyToMany(type => Student)
students: Student[];
}
要检索具有所有主题的用户:
const user = await User.findOne(USER_ID, { relations: ['subjects'] })
console.log(user.subjects);
我正在使用 Postgres
因为数据库有下一个表:
学生
id: Integer (PK)
name: Text
主题
id: Integer (PK)
name: Text
student_assignation
student_id: Integer (PK)
subject_id: Integer (PK)
那些表没有 Auto-generated PK
。
所以,我的实体是:
Student.entity.ts
import { Entity, Column, PrimaryGeneratedColumn, OneToMany, PrimaryColumn } from 'typeorm';
import { student_assignation } from './student_assignation.entity';
import { Subject } from './subject.entity';
@Entity()
export class Student {
@Column('number')
@PrimaryColumn()
id: number;
@Column('text')
name: string;
@OneToMany(type => student_assignation, x => x.subject_id)
//student_assignations: student_assignation[];
}
好吧,这是我的问题:
我正在尝试将所有主题分配给用户。
在 SQL
术语中,我将其定义为:
SELECT
u.id, u.name, r.id, r.name
FROM
student u INNER JOIN student_assignation ra
ON u.id = ra.student_id
INNER JOIN subject r
ON r.id = ra.subject_id
WHERE
u.id = 1
但是目前在nestjs中转换使用,我有这样的关系:
@OneToMany(type => student_assignation, x => x.subject_id)
@ManyToOne(type => subject, x => x.id)
但是,没有检索到任何信息。
您需要多对多关系。查看 TypeOrm 实现 here
您必须在 many-to-many
关系中实现您的实体:
@Entity()
export class Student {
@Column('number')
@PrimaryColumn()
id: number;
@Column('text')
name: string;
@ManyToMany(type => Subject)
@JoinTable({ name: 'student_assignation' })
subjects: Subject[];
}
@Entity()
export class Subject {
@PrimaryColumn()
id: number;
@Column()
name: string;
@ManyToMany(type => Student)
students: Student[];
}
要检索具有所有主题的用户:
const user = await User.findOne(USER_ID, { relations: ['subjects'] })
console.log(user.subjects);