php 原则分页器计数不正确

ogq8wdun  于 2023-01-29  发布在  PHP
关注(0)|答案(1)|浏览(143)

在我的Symfony项目中,我有一个User实体,它具有以下属性来定义followers关系

#[ORM\ManyToMany(targetEntity: self::class, inversedBy: 'followers')]
    #[ORM\JoinTable(name: "follows")]
    #[ORM\JoinColumn(name: "follower_id", referencedColumnName: "id")]
    #[ORM\InverseJoinColumn(name: "followed_id", referencedColumnName: "id")]
    private $followedUsers;

    #[ORM\ManyToMany(targetEntity: self::class, mappedBy: 'followedUsers')]
    private $followers;

我尝试在UserRepository中使用以下查询获取用户关注者的分页列表

public function getPaginatedFollowersByUser(User $user, int $offset, int $limit): Paginator
    {
        $qb = $this->createQueryBuilder('u')
            ->select('u')
            ->innerJoin('u.followers', 'f')
            ->andWhere('f.id = :userId')
            ->setParameter('userId', $user->getId())
            ->setFirstResult($offset)
            ->setMaxResults($limit);

        $paginator = new Paginator($qb, true);
        return $paginator;
    }

其中Paginator是Doctrine\ORM\Tools\Pagination\Paginator的一个示例。
这很好用,现在我想知道结果中有多少项。在DB中,只有一个follower是为我查询的用户定义的,但是$paginator->count()count($paginator)都返回值2。当我迭代paginator时,我只找到了一个结果,正如预期的那样。
我不确定我错过了什么或做错了什么。结果的计数是以不同的方式完成的吗?
谢谢大家!
注意:到目前为止,我找到的解决方法是使用

$count = count($paginatedUsers->getIterator()->getArrayCopy());

代替

$count = count($paginatedUsers);

它不是很优雅,但确实输出了预期的1

jfewjypa

jfewjypa1#

我很尴尬地说,分页器工作得非常好,这是我的错误,这失败了。
数据库实际上有2个条目对应于这个查询,这意味着分页器给出的结果实际上是正确的。我的查询中的$offset参数是1,而不是我期望的0,这使得第一个元素被忽略,因此我的迭代器只找到1个结果,但查询有2个结果。

相关问题