Typeorm - Найти записи по связи ManyToMany - PullRequest
0 голосов
/ 08 ноября 2019

Я использую Nestjs с Typeorm и Mysql, и я не могу найти хороший способ отфильтровать записи по соотношению их ко многим.

У меня есть эти 2 сущности:

Групповой объект:

@Entity({ name: 'groups' })
export class Group {
    @ManyToMany(() => Tag, { eager: true })
    @JoinTable()
    tags: Tag[];
}

Теговый объект

@Entity({ name: 'tags' })
export class Tag {
    @Column()
    @Index({ unique: true })
    tag?: string;
}

И хотел бы найти все группы, которые имеют тег с определенным текстом.

т.е. все группы, которые имеют tag.tag "sport"

Пробовали этот код:

const args = {
    where: [
        {
            'tags': In([Like(`%sport%`)]),
        }
    ],
    relations: ['tags'], // TAGS
    take: filter.take,
    skip: filter.skip,
    order: filter.order
};

return super.findAll(args);

, но, похоже, не работает ..

любая помощь будетздорово!

1 Ответ

1 голос
/ 10 ноября 2019
return find({
  where: {
    tags: {
      tag: Like(`%sport%`),
    },
  },
  relations: ['tags'],
});

Почти, typeorm принимает теги ObjectLiteral или keyof typeof от отношений, например, так:

FindConditions<T>: {
  where: {
    [s: keyof typeof T]: any,
  },
}

Это не совсем так, но это общая суть. И если keyof T является отношением, то any в любом случае заменяется на keyof relation.

Это полный тип для findConditions https://github.com/typeorm/typeorm/blob/master/src/find-options/FindConditions.ts

...