我正在建设一个项目,我有一份工作清单,每份工作属于一家公司。
REST控制器名为Job(只是为了简化)它有两种方法:
对于@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')并不是那么容易,应用类似的方法我必须循环所有结果来添加公司,但这种方法效率不高。
有任何想法吗?
根据论坛,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};
}
如果您有改进代码的建议,请告诉我。