是否有任何方式只选择给定的列,没有id列,并使用分页(跳过,采取)在TypeORM。我在NestJS上这样做:
article.service.ts:
async getAll(skip: number): Promise<Article[]> {
return await this.articleRepository.find({
select: {
id: false,
title: true,
description: true,
body: false,
created_at: true,
updated_at: false,
author: {
full_name: true
}
},
relations: {
author: true
},
skip: skip,
take: 10,
order: {
created_at: 'DESC'
}
});
}
在article.controller.ts中
@Get('articles')
async getAll(@Query('page') page: number) {
if(!page) { page = 1; }
const skip = (page - 1) * 10;
const articles = await this.articlesService.getAll(skip);
return {
status: true,
articles: articles,
page: page,
}
}
我的article.entity.ts
@Entity()
export class Article {
@PrimaryGeneratedColumn()
id: number;
@Column({ length: 100 })
title: string;
@Column()
description: string
@Column({ type: 'text' })
body: string;
@ManyToOne(() => User, (user) => user.articles)
author: User;
@CreateDateColumn()
created_at: string;
@UpdateDateColumn()
updated_at: string;
}
当我向此端点发送请求时,会发生错误。我认为这是因为分页(跳过,取)。
QueryFailedError: column distinctAlias.Article_id does not exist
at PostgresQueryRunner.query (project/src/driver/postgres/PostgresQueryRunner.ts:299:19)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at SelectQueryBuilder.loadRawResults (project/src/query-builder/SelectQueryBuilder.ts:3601:25)
at SelectQueryBuilder.getRawMany (project/src/query-builder/SelectQueryBuilder.ts:1573:29)
at SelectQueryBuilder.executeEntitiesAndRawResults (project/src/query-builder/SelectQueryBuilder.ts:3295:26)
at SelectQueryBuilder.getRawAndEntities (project/src/query-builder/SelectQueryBuilder.ts:1617:29)
at SelectQueryBuilder.getMany (project/src/query-builder/SelectQueryBuilder.ts:1707:25)
at ArticlesService.getAll (project/src/articles/articles.service.ts:35:12)
at ArticlesController.getAll (project/src/articles/articles.controller.ts:56:22)
at project/node_modules/@nestjs/core/router/router-execution-context.js:46:28
但是,如果我删除、跳过并接受或选择id列,它就能工作。我是否可以选择没有id列的其他列并一起使用分页?
发布于 2022-09-27 05:15:55
通过选择id列并在返回之前删除它们,临时解决了问题。
articles.forEach(article => { delete article.id });
以下是article.service.ts的全部功能
async getAll(skip: number): Promise<Article[]> {
const articles = await this.articleRepository.find({
select: {
id: true,
title: true,
description: true,
body: false,
created_at: true,
updated_at: false,
author: {
full_name: true
}
},
relations: {
author: true
},
skip: skip,
take: 10,
order: {
created_at: 'DESC'
}
});
articles.forEach(article => { delete article.id });
return articles;
}
注意:应该有一个更好的解决方案。
https://stackoverflow.com/questions/73857478
复制相似问题