有没有办法在TypeORM中只 Select 给定列而不 Select id列,并使用分页(跳过、取走).我在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

但是,如果我删除跳过和Take,或者 Select id列,它就会起作用.有没有什么方法可以 Select 没有id列的其他列并一起使用分页

推荐答案

通过 Select 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;
}

NOTE:不过,应该有更好的解决方案.

Javascript相关问答推荐

使用JavaScript重新排序行

Angular material 拖放堆叠的牌副,悬停时自动展开&

使用Java脚本根据按下的按钮更改S文本

并不是所有的iframe都被更换

在WordPress中使用带有WPCode的Java代码片段时出现意外令牌错误

提交链接到AJAX数据结果的表单

查询参数未在我的Next.js应用路由接口中定义

Puppeteer上每页的useProxy返回的不是函数/构造函数

如何在Bootstrap中减少网格系统中单个div的宽度

Nextjs 13.4 Next-Auth 4.2登录(&Quot;凭据&,{});不工作

与svg相反;S getPointAtLength(D)-我想要getLengthAtPoint(x,y)

在验证和提交表单后使用useNavigate()进行react 重定向,使用带有加载器和操作的路由

P5.js中的分形树

react -原生向量-图标笔划宽度

FireBase FiRestore安全规则-嵌套对象的MapDiff

如何使用puppeteer操作所有选项

如何检测当前是否没有按下键盘上的键?

每隔一行文本段落进行镜像(Boustrophedon)

不允许在对象文本中注释掉的属性

Js问题:有没有办法将数据从标记表转换成图表?