typescript - Typescipt:如何从 typeorm getManager.query() 访问类内容
问题描述
我对 typeORM/Typescript 世界比较陌生。我有一个服务类来提供资源,如下所示:
import { Injectable} from '@nestjs/common';
import { getManager } from 'typeorm';
class MyServiceClass {
//static readonly sqlStr = `SELECT MAINTABLE.* WITH LEFT OUTER JOIN WITH TWO MORE TABLES `;
async findAll(limit?: number) {
const mgr = getManager();
const retRows = await mgr.query(
`
SELECT MAINTABLE.* WITH LEFT OUTER JOIN WITH TWO MORE TABLES
${limit ? `FETCH NEXT ${limit} ROWS ONLY` : ''}
`,
);
return retRows;
}
async findOne(id: number) {
const mgr = getManager();
const retRow = await mgr.query(
`
SELECT MAINTABLE.* WITH LEFT OUTER JOIN WITH TWO MORE TABLES
${id ? ` WHERE MAINTABLE.MAIN_ID = ${id}` : ''}
`,
);
return retRow;
}
}
我想从每个函数中删除 sql 语句,但保留过滤逻辑。相反,我想在 mgr.query() 函数中使用 MyServiceClass.sqlStr 。如果有人指出我如何做到这一点,那就太好了。
解决方案
您应该使用 typeorm 模块中的存储库工具:
async findAll(limit?: number) {
const entities = await this.entityRepository.findAll(
{ where: { id: 1 } }, relations: ['someRelation'], sort: {id: 'DESC'},
/* you can create very advanced requests */
);
return entities;
}
或使用查询生成器:
async findAll(limit?: number) {
const rows = await this.entityRepository
.createQueryBuilder('Entity')
.leftJoinAndSelect('Entity.relation', 'relation')
.where('relation.id = :id', {id: 1})
/* any query condition here */
.getMany() // or .getSql() or whatever you want
return rows;
}
有关如何在此处设置 typeorm 存储库的更多详细信息
有关在此处查找选项的更多信息
在此处查询构建器文档
推荐阅读
- apache-spark - 在同一个程序中同时运行 TensorFlow 和 Pyspark
- python - 时间序列数据预测的线性回归模型选择
- swift - 使用 AVPlayer swift 完成后再次播放音频
- python - 选择没有索引的下一个元素
- python - Python 对象可以调用继承堆栈中较低的方法吗?
- sql - 如何通过查询查看 SQL Server 中 api 的数据?
- java - Android资源编译失败(Android Studio ver. 3.2.1)
- groovy - ODI 12C 中的 SNP_POP 等效项?
- javascript - 使用 ajax 调用调用 Outlook API 以将事件添加到 Outlook 日历
- typescript - 如何在使用 Vue CLI@3 和 TypeScript 设置的项目中使用?