我是ORM系统的新手,我正在尝试插入与对象“ pseudo”绑定的数据“ Mark”。
这是我的实体, 伪:
@Entity()
export class PseudoEntity{
@PrimaryGeneratedColumn()
id: number;
@Column({unique: true})
pseudo: string;
@Column({ default: 1 })
application_version: number;
@Column({ default: -1 })
score_on_last_calculation: number;
@Column({default: 1})
nb_request: number;
@Column({default: -1})
nb_mark_on_last_calculation: number;
@OneToMany(type => Mark, marks => marks)
marks: Mark[];
}
然后标记:
@Entity()
export class MarkEntity {
@PrimaryGeneratedColumn()
int: number;
@Column({ type: 'datetime'})
submission_date: Date;
@Column()
mark: number;
@ManyToOne(
type => Pseudo,
pseudo => pseudo,
)
pseudo: Pseudo;
}
这是我插入数据的服务:
@Injectable()
export class MarkService {
constructor(private pseudoService: PseudoService) {}
async postMark(pseudo: string, mark: number) {
await this.pseudoService.findPseudo(pseudo).then(
p =>
getConnection()
.createQueryBuilder()
.insert()
.into(Mark)
.values([
{
mark: mark,
pseudo: p,
},
]),
);
}
}
我成功插入了一个Pseudo而不是一个标记:/
能帮我吗?
预先感谢
答案 0 :(得分:1)
首先,您应该对实体进行一些细微更改:
@OneToMany(type => Mark, marks => marks.pseudo)
marks: Mark[];
@ManyToOne(
type => Pseudo,
pseudo => pseudo.marks,
)
pseudo: Pseudo;
进行了上述更改,使用注入的pseudoRepository
来查询和更新所需的Pseudo
:(有关Registering and Injecting entities的更多信息)
@Injectable()
export class MarkService {
constructor(@InjectRepository(Pseudo) private readonly pseudoRepository: Repository<Pseudo>) { }
async postMark(mark: number, pseudo: Pseudo): Promise<void> {
let _mark = new Mark();
mark.mark = mark;
mark.pseudo = await pseudoRepository.findOne({ pseudo });
await this.pseudoRepository.save(_mark)
}
}
答案 1 :(得分:0)
我没有尝试过,但是我想这应该起作用:
import { Injectable } from '@nestjs/common';
import { PseudoEntity as Pseudo } from '../entity/pseudo.entity';
import { MarkEntity as Mark } from '../entity/mark.entity';
import { getConnection } from 'typeorm';
@Injectable()
export class PseudoService {
async postMark(markInput: number, pseudoInput: string) {
let mark = new Mark();
mark.mark = markInput;
mark.submission_date = Date.now();
mark.pseudo = await await repository.findOne({ pseudo: pseudoInput});
await getConnection().manager
.save(mark)
.then(mark => {
console.log("Mark has been saved. Mark id is ", mark.id);
});
}
//....
}
您可能应该添加检查,以防在数据库中找不到此pseudoInput的伪内容。