gpt4 book ai didi

环回 4 : Many to Many Relation

转载 作者:行者123 更新时间:2023-12-04 01:12:44 25 4
gpt4 key购买 nike

我正在尝试实现一种方法来过滤具有多对多关系的表中的数据。

我有下表 job、job_category 和 category。

到目前为止,我正在考虑使用 job_id 对 job_category 进行查询,然后使用该结果使用 IN() 添加条件,但我也没有找到任何方法来实现此选项。

问题:

  1. 如何在 Loopback 4 中实现 ManytoMany 关系?

  2. 如何使用 IN 过滤查询?

PD我可以将 $inq 用于问题编号 2。

filter.where = {
...filter.where,
id: {inq: [2, 7]},
};

最佳答案

考虑到您问题的上下文,可以在 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);
}
}

在工作类别关系模型中,我们将实现工作和类别模型的属于关系。这将确保 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 Controller ,并在其中使用查找方法来获取数据。不幸的是,lb4 中尚未实现用于查找方法的 Filter 类中的参数。它仍然是 WIP。引用this来自 loopback-next repo 的线程进行更新。在那之前,您可能必须添加自定义逻辑 Controller 或存储库类才能实现此目的。下面是我这边建议的两种方法。

  1. 配置属于存储库中的关系(引用文档 here)并在 Controller 内部使用它来获取响应相关数据(引用实现 here)。您可能需要为此创建自己的响应模型。为此,我们创建了自己的 DTO。您也可以返回“任何”类型作为对此的响应,但不推荐这样做。
  2. 如果需要,您可以执行自己的连接查询。那是 native 查询方法。但是,不幸的是,存储库类中的执行函数还没有实现。参见 here .它虽然在 dts 中可用。因此,我们实现了一个解决方案,直到它实现为止。我们创建了一个基础存储库类,它将被我们应用程序中的所有存储库类继承(将所有 extends 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,您已经提到了方法。行得通。

关于环回 4 : Many to Many Relation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55114484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com