我有两个实体问题和标签。它们之间存在多对多关系,并且生成了一个“tag_question”表(带有 question_id 和 tag_id 列)。
$questions = $tag->getQuestion();
当它被执行时,它返回所有结果,所有带有标签的问题。该方法由 Tag 实体中的 Doctrine2 自动生成。如何限制结果(添加分页等)?
我有两个实体问题和标签。它们之间存在多对多关系,并且生成了一个“tag_question”表(带有 question_id 和 tag_id 列)。
$questions = $tag->getQuestion();
当它被执行时,它返回所有结果,所有带有标签的问题。该方法由 Tag 实体中的 Doctrine2 自动生成。如何限制结果(添加分页等)?
如果性能对您来说不是一个大问题,那么使用 Doctrine 获取对所有 Question 实体的引用并让 PHP 进行过滤(而不是让 MySQL 进行)应该不是什么大问题。请记住,默认情况下,Doctrine 不会返回完整的实体。相反,它返回一个代理对象(稍后可以通过对数据库的另一个查询来更充分地补充它):
class Question
{
public function getQuestions($offset = 0; $length = null)
{
return array_slice( $this->questions, $offset, $length );
}
}
但是,如果性能是一个问题,您可能需要考虑使用执行自定义 DQL 查询或 Doctrine 的 QueryBuilder 类的方法创建一个自定义存储库类:
class TagRepository
{
public function findSomeByQuestion($question, $offset, $length)
{
$qb = $this->createQueryBuilder("tag")
->select("tag")
->join("tag.questions", "questions")
->where("question.id = :questionId")
->setParameter("questionId", $question->getId())
->setFirstResult($offset)
->setMaxResults($length);
return $qb->getQuery()->getResult();
}
}