我使用查询生成器,并且在我的请求中几乎没有连接(通过使用
leftJoinAndMapMany
)。由于连接,我需要使用 skip
和 take
进行分页,因为使用 offset
和 limit
它不能按我的需要工作。
所以,如果我使用 offset
和 limit
请求工作正常,我没有任何例外。但是如果我使用 skip
和 take
我有 ""User"" alias was not found. Maybe you forgot to join it?
(不知道为什么有两个引号,也许这是一个问题?)
sql 查询调试显示正常查询,我可以在数据库中运行它并且它可以工作。所以问题出在 typeorm 方面...如果我删除连接,它可以与 skip
和 take
一起使用。
const dbQuery: SelectQueryBuilder<T> = userRepository.createQueryBuilder('User');
dbQuery.leftJoinAndMapMany(...);
dbQuery.skip(skip);
dbQuery.take(take);
更新: 我检查了
typeorm
lib 并找到了 QueryExpressionMap.prototype.findAliasByName = function (aliasName)
函数,发现 aliasName 带有引号,所以我添加了代码来删除这些引号,现在它可以工作了,但不确定这是否是一个好的解决方案:)
问题是
orderBy
,如果出现skip
和take
,您应该提供User.id
而不是"User"."id"
(就像您使用limit/offset
时那样)