我正在尝试使用createQueryBuilder
运行以下类型的查询。我已经验证了我的所有实体都已正确创建和连接。但是,运行以下命令会返回一个空数组:
let apiKey = await getConnection()
.createQueryBuilder()
.from(ApiKey, "apiKey")
.innerJoinAndSelect("apiKey.site", "site")
.where("site.domain = :domain", { domain: "mysitename.com" })
.andWhere("apiKey.key = :key", { key })
.getMany()
但是!当我用getSql()
替换getMany()
,复制原始SQL并运行它时,它就工作了!我得到了我期望的结果:
SELECT "site"."id" AS "site_id", "site"."domain" AS "site_domain", "site"."name" AS "site_name", "site"."createdAt" AS "site_createdAt", "site"."apiKeyId" AS "site_apiKeyId", "site"."userId" AS "site_userId" FROM "api_key" "apiKey" INNER JOIN "site" "site" ON "site"."id"="apiKey"."siteId" WHERE "site"."domain" = 'mysitename.com'
我试图构建这个查询的方式有什么明显的错误吗?
提前感谢您的帮助!
.getMany((返回类型Promise of Entity[],鉴于查询的性质,我怀疑您根本没有返回实体。尝试.gtRawMany((或.gtRawAndEntities((
有关更多详细信息,请参阅此处的QueryBuilder文档。
您需要选择存储库
let apiKey = await getConnection()
.getRepository(ApiKey) // <-----------
.createQueryBuilder('apiKey') // <-----------
.innerJoinAndSelect("apiKey.site", "site")
.where("site.domain = :domain", { domain: "mysitename.com" })
.andWhere("apiKey.key = :key", { key })
.getMany()