TypeORM - 连接表上的多对多where子句

时间:2018-05-14 09:45:50

标签: typeorm

我使用Typeorm@0.2.5和MySql驱动程序 我有一个实体MyEntity,它与另一个实体RelEntity有多对多的关系。因此,Typeorm会生成PK的数据透视表以创建关系。

我的问题来自需要使用MyEntity的where子句查找所有RelEntity.prop = mySearchKey

我不确定这是否归咎于我错过了一些文档或者没有完全理解如何使用Typeorm构建此查询。

我相信我的SQL语句看起来像是:

SELECT m.* FROM my_entity_table m 
LEFT JOIN my_rel_pivot_table mrp ON mrp.my_entity_id = m.id 
LEFT JOIN rel_entity_table r ON r.id = mrp.rel_entity_id
WHERE r.id = {MY_VALUE_HERE}

但是,我不太清楚如何将其转换为Typeorm查询。

我试过了:

this.entityRepo.find({
    where: {
        rel: myValue
    }
});

我也尝试过:

this.entityRepo.find({
    where: {
        rel: { id: myValue}
    }
});

但是,我收到以下错误:
Unknown column 'MyEntity.myEntityId' in 'where clause'

之前有没有人遇到过这个问题,或者知道如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

在GitHub上寻求帮助后,以下答案将是使用QueryBuilder API。

可以这样做:

const myEntities = await this.entityRepo.createQueryBuilder("entity")
    .leftJoin("relEntity", "relEntity.id = :myId", {myId: myValue})
    .getMany()

非常感谢https://github.com/pleerock帮助我解决这个问题。

答案 1 :(得分:0)

在我的文章和类别(多对多)之间,我正在为此工作。

要获取来自特定类别的我的文章

  this
  .entityRepo
  .createQueryBuilder('article')
  .innerJoin(
       'article.categories', 
       'category', 
       'category.id = :categoryId', 
       { categoryId: XXX }
  ).getMany();

XXX是特定类别的ID。

希望它会对您有所帮助。