Принимая во внимание контекст вашего вопроса, отношение «многие ко многим» может быть реализовано в 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 для модели категорий заданий и использовать там методы поиска для извлечения данных. К сожалению, параметр includes в классе Filter для методов поиска еще не реализован в lb4. Это все еще WIP. Обратитесь к этой ветке из репозитория loopback-next для получения обновлений. А пока вам, возможно, придется добавить пользовательский логический t контроллер или классы репозитория для достижения этой цели. Ниже приведены два предложенных мной подхода.
- Настроить принадлежит отношению в репозитории (см. Документацию здесь) и использовать его внутри контроллера для получения ответа соответствующими данными (см. реализацию здесь). Для этого вам может потребоваться создать свою собственную модель ответа. Для этого мы создали собственный DTO. Вы также можете вернуть любой тип в качестве ответа для этого, но это не рекомендуется.
- При необходимости вы можете выполнить свой собственный запрос на соединение. Это собственный подход к запросам. Но, к сожалению, функция execute в классе репозитория еще не реализована. См. здесь. / а>. Однако он доступен в 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 вы уже упомянули подход. Это работает.
person
Samarpan
schedule
01.04.2019