TypeORM 中 .limit() 和 .take() 的区别
Difference between .limit() and .take() in TypeORM
我对具有相似目的的不同 TypeORM 方法感到困惑。来自 TypeORM 文档:
.take()
— 分页限制。设置要获取的最大实体数。
.skip()
— 分页偏移量。设置要跳过的实体数。
我不太明白“分页limit/offset”是什么意思。但是,不幸的是,我找不到任何关于区分 .take()
和 .limit()
的信息。我决定在 TypeORM 的源代码中查看这些方法的描述:
.limit()
— 集合的 LIMIT - 要选择的最大行数。请注意,如果您使用联接,它可能不会像您预期的那样工作。如果你想实现分页,并且你正在查询中加入,那么请改用 take 方法。
.offset()
— 设置的偏移量 - 选择偏移量。请注意,如果您使用联接,它可能不会像您预期的那样工作。如果你想实现分页,并且你正在查询中加入,那么请改用 skip 方法。
为什么这两种方法不能用于分页?那他们的目的是什么?拜托,任何人都可以为我提供使用所有这 4 种方法的清晰示例吗?提前致谢。
不同之处在于take
和skip
将不是您要执行的查询的一部分,typeorm在获得结果后执行它。当您的查询包含任何类型的连接时,这总体上是有用的,因为结果不像我们的 TypeORM 映射。
另一方面,limit
和 offset
包含在查询中,但如果您使用联接,则可能无法按预期工作。例如,如果您有一个与 B 具有 OneToMany 关系的实体 A,并且您尝试获取 A 上的前三个条目(使用限制 3)并与 B 进行连接,如果第一个条目有 3 个 B,那么您将只拿一个A。
看一下说明,如果用offset可以看到(limit也一样)
我对具有相似目的的不同 TypeORM 方法感到困惑。来自 TypeORM 文档:
.take()
— 分页限制。设置要获取的最大实体数。.skip()
— 分页偏移量。设置要跳过的实体数。
我不太明白“分页limit/offset”是什么意思。但是,不幸的是,我找不到任何关于区分 .take()
和 .limit()
的信息。我决定在 TypeORM 的源代码中查看这些方法的描述:
.limit()
— 集合的 LIMIT - 要选择的最大行数。请注意,如果您使用联接,它可能不会像您预期的那样工作。如果你想实现分页,并且你正在查询中加入,那么请改用 take 方法。.offset()
— 设置的偏移量 - 选择偏移量。请注意,如果您使用联接,它可能不会像您预期的那样工作。如果你想实现分页,并且你正在查询中加入,那么请改用 skip 方法。
为什么这两种方法不能用于分页?那他们的目的是什么?拜托,任何人都可以为我提供使用所有这 4 种方法的清晰示例吗?提前致谢。
不同之处在于take
和skip
将不是您要执行的查询的一部分,typeorm在获得结果后执行它。当您的查询包含任何类型的连接时,这总体上是有用的,因为结果不像我们的 TypeORM 映射。
另一方面,limit
和 offset
包含在查询中,但如果您使用联接,则可能无法按预期工作。例如,如果您有一个与 B 具有 OneToMany 关系的实体 A,并且您尝试获取 A 上的前三个条目(使用限制 3)并与 B 进行连接,如果第一个条目有 3 个 B,那么您将只拿一个A。
看一下说明,如果用offset可以看到(limit也一样)