фильтрация сущностей
у меня есть две таблицы.
свойство 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 здесь не просто так, потому что много продуктов ссылаются на одни и те же свойства.