фильтрация сущностей

у меня есть две таблицы.
свойство properties из таблицы ProductEntity ссылается на ключи из таблицы PropertyEntity. всё работает.

class ProductEntity {
    @PrimaryGeneratedColumn('rowid')
    id: number;

    @ManyToMany(
        () => PropertyEntity,
        { eager: true, cascade: true }
    )
    @JoinTable()
    properties: Array<PropertyEntity>;
}

class PropertyEntity {
    @PrimaryGeneratedColumn('rowid')
    id: number;
}

хочу получить все продукты и отфильтровать по их properties, а именно получить только те продукты, у которых в массиве properties есть ключ с id == 120. пробовал сделать с помощью следующего кода:

const result = this.productRepo
    .createQueryBuilder('product')
    // подключаю relative PropertEntity таблицу
    .leftJoinAndSelect('product.properties', 'properties')
    // пытаюсь отфильтровать и получить товары,
    // у которых свойства только с id равным 120
    .andWhere('properties.id = :filterId', { filterId: 120 })
    .getMany();

фильтрация работает, но фильтруются не только продукты, у которых есть ключи с id === 120 в массиве properties, но и сами свойства properties этого продукта (все ключи из массива properties, у которых id != 120, пропадают).

Вопрос: как сделать рабочую фильтрацию? Так же буду рад любому совету по поводу этой проблемы или кода/архитектуры в целом


P.S: @ManyToMany здесь не просто так, потому что много продуктов ссылаются на одни и те же свойства.


Ответы (0 шт):