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

Col*_*lum 5 typeorm

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

我的问题来自需要MyEntity使用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}
Run Code Online (Sandbox Code Playgroud)

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

我试过了:

this.entityRepo.find({
    where: {
        rel: myValue
    }
});
Run Code Online (Sandbox Code Playgroud)

我也试过:

this.entityRepo.find({
    where: {
        rel: { id: myValue}
    }
});
Run Code Online (Sandbox Code Playgroud)

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

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

The*_*Guy 9

我已经在我的文章和类别(多对多)之间为我工作了。

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

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

XXX是具体类别的id。

希望它能帮助你。


Col*_*lum 5

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

可以这样做:

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

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

  • 在当前版本的 TypeORM 中,有没有办法使用 repo.find({where: {},relations: []}) 语法来做到这一点? (19认同)