Я создаю две таблицы тегов и tagTranslation. Ниже приведено поле каждого
Tag
id, type, transloations, creaed_at, updated_at
TagTranslation
id, tag_id, name, language
Я использую graphql, я хочу получить список тегов по типу, имени и языку
{ tags(name:"tag1", language:"en, type:3){
id,
type,
translations{
id,
name,
language,
}
}
}
, поэтому я создаю резольвер как следующий
@Query(returns => [Tag])
tags(@Args() tagArgs: TagArgs): Promise<Tag[]> {
const where = {
...(tagArgs.type) && {type: tagArgs.type}
};
const include_where = {
...(tagArgs.name) && {name: { [Op.like]: `%${tagArgs.name}%` }},
...(tagArgs.language) && {language: tagArgs.language}
};
return this.tagService.findAll({
where: where,
include: {
as: 'translations',
model: TagTranslation,
where: include_where,
required: true,
}
});
}
@Query(returns => Tag)
tag(@Args({name: 'id', type: ()=> Int}) id: number): Promise<Tag>{
return this.tagService.get(id)
}
@ResolveProperty()
async translations(@Parent() tag): Promise<TagTranslation[]>{
const { id } = tag;
return await this.tagTranslationService.findAll({tag_id: id});
}
когда я вызываю теги, сначала вызывается запрос
. Сначала выполняется запрос, чтобы получить желаемые результаты.
, но второй,
SELECT `id`, `tag_id`, `name`, `language`, `created_at`, `updated_at` FROM `tag_translation` AS `TagTranslation` WHERE `TagTranslation`.`tag_id` = 1;
запрос вызывается еще раз, поэтому я не могу получить результаты, что я хочу.
Я думаю, что второй запрос вызывается из-за ResolvePropertyЯ удаляю ResolveProperty. после этого запрос тега не включает информацию перевода тега ...
как я могу решить эту проблему? или есть другая идея ??