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