【问题标题】:Loopback 4: Join 2 related modelsLoopback 4:加入2个相关模型
【发布时间】:2019-02-27 20:13:21
【问题描述】:

如果我有一份工作清单,并且每个工作都属于一家公司,那么我正在构建一个项目。

名为 Job 的 REST 控制器(只是为了简单起见)它有 2 个方法:

  • @get('/jobs')
  • @get('/jobs/{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】:

    根据论坛的说法,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};
      }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      相关资源
      最近更新 更多