typerom的条件查询:where不能使用3级属性是吗,请问应该如何进行2层的属性的条件查询呢?

数据库的表设计如下:

ComboModule 1:1 Combo
Combo n:1 Project

但是我想要条件查询(proj没有被删除):

  const modules = await dataBase.getRepository(ComboModule)
  .createQueryBuilder('ComboModule')
  .where("combo.project.isDeleted = :isDeleted", { isDeleted: false })
  .getMany()

使用此会报错。

where不能使用3级属性是吗,请问应该如何条件查询呢?

阅读 906
2 个回答

可以使用join方法将相关的表连接起来,然后在 where子句中使用连接后的表的属性进行条件查询。

const modules = await dataBase.getRepository(ComboModule)
  .createQueryBuilder('comboModule')
  .innerJoin('comboModule.combo', 'combo')
  .innerJoin('combo.project', 'project')
  .where('project.isDeleted = :isDeleted', { isDeleted: false })
  .getMany();

用 leftJoin 和 leftJoinAndSelect:

const modules = await dataBase.getRepository(ComboModule)
  .createQueryBuilder('comboModule')
  .leftJoinAndSelect('comboModule.combo', 'combo')
  .leftJoin('combo.project', 'project')
  .where('project.isDeleted = :isDeleted', { isDeleted: false })
  .getMany();

或者都用 leftJoinAndSelect:

const modules = await dataBase.getRepository(ComboModule)
  .createQueryBuilder('comboModule')
  .leftJoinAndSelect('comboModule.combo', 'combo')
  .leftJoinAndSelect('combo.project', 'project')
  .where('project.isDeleted = :isDeleted', { isDeleted: false })
  .getMany();

还可以用 relations 选项:

const modules = await dataBase.getRepository(ComboModule).find({
  relations: ['combo', 'combo.project'],
  where: {
    combo: {
      project: {
        isDeleted: false
      }
    }
  }
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏