考虑到您问题的上下文,可以在 lb4 中实现多对多关系,如下所示。
工作模型(示例) -
@model({
name: 'jobs',
})
export class Job extends Entity {
@property({
type: 'number',
id: true,
})
id: number;
@property({
type: 'string',
required: true,
})
name: string;
// Other columns of the table.....
constructor(data?: Partial<Job>) {
super(data);
}
}
类别模型(样本) -
@model({
name: 'categories',
})
export class Category extends Entity {
@property({
type: 'number',
id: true,
})
id: number;
@property({
type: 'string',
required: true,
})
name: string;
// Other columns of the table.....
constructor(data?: Partial<Category>) {
super(data);
}
}
在 Job 类别关系模型中,我们将使用 Job 和 Category 模型来实现属于关系。这将确保 m:n 关系。
@model({
name: 'job_categories',
})
export class JobCategory extends Entity {
@property({
type: 'number',
id: true,
})
id: number;
@belongsTo(() => Job)
job_id: number;
@belongsTo(() => Category)
category_id: number;
constructor(data?: Partial<JobCategory>) {
super(data);
}
}
现在,使用 lb4 CLI,您可以为作业类别模型创建存储库和 REST 控制器,并使用其中的 find 方法来获取数据。不幸的是,在过滤器类中包含用于查找方法的参数尚未在 lb4 中实现。它仍然在制品。请参阅loopback-next repo 中的此线程以获取更新。在此之前,您可能必须添加自定义逻辑 t 控制器或存储库类来实现此目的。下面是我建议的两种方法。
- 配置属于存储库中的关系(请参阅此处的文档)并在控制器内部使用它来获取相关数据的响应(请参阅此处的实现)。您可能需要为此创建自己的响应模型。为此,我们创建了自己的 DTO。您也可以返回“任何”类型作为对此的响应,但不建议这样做。
- 如果需要,您可以执行自己的连接查询。这是本机查询方法。但是,不幸的是,存储库类中的再次执行功能尚未实现。见这里。它虽然在 dts 中可用。因此,我们实施了一项工作,直到其实施。我们创建了一个 Base 存储库类,它将被我们应用程序中的所有存储库类继承(将所有扩展 DefaultCrudRepository替换为extends AppDefaultCrudRepository)。这是基本存储库的实现。
export abstract class AppDefaultCrudRepository<
T extends Entity,
ID
> extends DefaultCrudRepository<T, ID> {
constructor(
entityClass: typeof Entity & {
prototype: T;
},
dataSource: AppDataSource,
) {
super(entityClass, dataSource);
}
execute(
command: Command,
parameters: NamedParameters | PositionalParameters,
options?: Options,
): Promise<AnyObject> {
// Commented below statement until it is implemented in lb4
// return super.execute(command, parameters, options);
return this.dataSource.execute(command, parameters, options);
}
}
希望这对您的问题 #1 有所帮助。对于问题 #2,您已经提到了这种方法。这样可行。