不幸的是,typeorm 无法处理这些方法中的嵌套查询(findOne, findMany, update etc...
),您在上面尝试使用的内容。然而,有几种不同的解决方案,但它们都使用更复杂的方法。
最相似的解决方案是如果您使用find
方法,但使用查询生成器的所有参数对其进行配置:
await connection.getRepository(Meta).findOne({
where: (qb: SelectQueryBuilder<Meta>) => {
qb.where({
metaId: metaId,
}).andWhere("metaTables.status != :status", { status: 'white' });
},
join: {
alias: "meta",
innerJoin: {
metaTables: "meta.metaTables",
},
},
});
另一种方法是简单地使用查询生成器并构造以下查询:
await connection
.getRepository(Meta)
.createQueryBuilder("meta")
.innerJoin("meta.metaTables", "metaTables")
.where({ metaId: metaId })
.andWhere("metaTables.status != :status", { status: "white" })
.getOne();
然而,还有第三种解决方案,但它仅有效<=0.2.24
。该解决方案构建了where
以这种方式对象,每个关系过滤器显示为单个字符串,其中列用点连接。这是一个例子:
await connection.getRepository(Meta).findOne({
where: {
metaId: metaId,
"metaTables.status": Not("white"),
},
relations: ["metaTables"],
});