如何将普通的mysql-sql查询转换为typeorm



我正在将现有的express.js项目迁移到nest.js中。我现在面临的问题是,当前项目使用MySQL,它是一个普通的SQL查询,但我使用TypeOrm进行SQL查询。但是我不知道如何在TypeOrm中实现表之间的关系。以下是我的

推理_结果.实体.ts

import { Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from "typeorm";
import { Inference } from "./inference.entity";
@Entity('inference_result')
export class Inference_result {
@PrimaryGeneratedColumn()
result_id: number
@OneToOne(() => Inference, (inference) => inference.inference_id)
// @JoinColumn()
inference_id: Inference;
@Column()
result_type: string
@Column({type: 'varchar', length: 512, nullable: false})
s3_key: string
}

推理实体.ts

import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
@Entity('inference')
export class Inference {
@PrimaryGeneratedColumn({type: 'int',})
inference_id: number;
@Column()
inference_type: string;
@Column()
created_by: string;
@Column()
s3_key: string;
@Column({type: 'int' , nullable: true, default: 0})
progress: number
@Column({type: 'int', nullable: true, default: 0})
error_code: any;
}

以下是我试图获取数据的方法

async getLink(id: number) {
const response = await 
this.inferenceResultRepo.createQueryBuilder('inference_result')
.innerJoin('inference_result.inference_id', "inference", 
"inference_result.inference_id = 
inference.inference_id")
.select('inference_result.s3_key', 
'inference_result.result_type').where('inference.inference_id =:id' ,{id}).getOne()
} 

我想得到的结果是

CREATE TABLE `inference` (
`inference_id` int NOT NULL AUTO_INCREMENT,
`inference_type` varchar(20) NOT NULL,
`created_by` varchar(21) NOT NULL,
`s3_key` varchar(512) NOT NULL,
`progress` float DEFAULT NULL,
`error_code` int DEFAULT NULL,
PRIMARY KEY (`inference_id`)
);
CREATE TABLE `inference_result` (
`result_id` int NOT NULL AUTO_INCREMENT,
`inference_id` int NOT NULL,
`result_type` varchar(20) NOT NULL,
`s3_key` varchar(512) NOT NULL,
PRIMARY KEY (`result_id`),
KEY `inference_id` (`inference_id`),
CONSTRAINT `inference_result_ibfk_1` FOREIGN KEY (`inference_id`) REFERENCES 
`inference` (`inference_id`)
);
const sql = 'SELECT inference_result.s3_key AS s3_key, 
inference_result.result_type AS result_type FROM inference_result INNER JOIN 
inference ON inference.inference_id = inference_result.inference_id WHERE 
inference.inference_id = ?';
const params = [inference_id, session_id];

如果你们能给我任何建议,我将不胜感激。顺便说一句,我对nest.js非常陌生,所以我可能会犯任何愚蠢的错误:(

事实并非如此。创建推理结果表时出现问题。

看起来像这个

result_id result_type 
s3_key 
inferenceIdInferenceId 

此处

推理id推理id列应该和推理id一样,但不知怎么的,它不是以这种方式创建的

在试验之前,您应该始终查看typenorm的文档并从示例开始

import { Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from "typeorm";
import { Inference } from "./inference.entity";
@Entity('inference_result')
export class Inference_result {
@PrimaryGenerate
@OneToOne(type => Inference) @JoinColumn() 
inference_id: Inference;
@Column()
result_type: string
@Column({type: 'varchar', length: 512, nullable: false})
s3_key: string
}

最新更新