Loopback 4:加入2个相关模型

问题描述 投票:3回答:1

我正在建设一个项目,我有一份工作清单,每份工作属于一家公司。

REST控制器名为Job(只是为了简化)它有两种方法:

  • @get( '/作业')
  • @get( '/作业/ {ID}')

对于@get('/ jobs / {id}')的情况,我发现了一个不完美的解决方案:

@get('/jobs/{id}', {
    responses: {
      '200': {
        description: 'Job model instance',
        content: {'application/json': {schema: {'x-ts-type': Job}}},
      },
    },
  })
  async findById(@param.path.number('id') id: number): Promise<Job> {
    const job: Job = await this.jobRepository.findById(id);
    const company: Company = await this.jobRepository.company(job.company_id);

    job.company = company;

    return job;
  }

我添加了一家物业公司,我分配了公司。

但是对于@get('/ jobs')并不是那么容易,应用类似的方法我必须循环所有结果来添加公司,但这种方法效率不高。

有任何想法吗?

javascript node.js loopbackjs
1个回答
0
投票

根据论坛,Loopback还无法进行加入。它计划在接下来的3个月,同时我解决了:

@get('/jobs', {
    responses: {
      '200': {
        description: 'Array of Job model instances',
        content: {
          'application/json': {
            schema: {type: 'array', items: {'x-ts-type': Job}},
          },
        },
      },
    },
  })
  async find(
    @param.query.object('filter', getFilterSchemaFor(Job)) filter?: Filter,
  ): Promise<{jobs: Job[]; count: number}> {
    const jobs = await this.jobRepository.find(filter);

    await Promise.all(
      jobs.map(
        async (job): Promise<Job> => {
          let company = await this.jobRepository.company(job.company_id);
          return (job.company = company);
        },
      ),
    );

    const count = await this.jobRepository.count();

    return {jobs, ...count};
  }

如果您有改进代码的建议,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.