3
我有兩個實體Question和Tag。它們之間有很多關係,並且有一個生成的'tag_question'表(帶有question_id和tag_id列)。限制Symfony2中的多對多關係結果
$questions = $tag->getQuestion();
當這個被執行時,它返回所有的結果,所有的問題與標籤。該方法由Tag實體中的Doctrine2自動生成。如何限制結果(添加分頁等)?
我有兩個實體Question和Tag。它們之間有很多關係,並且有一個生成的'tag_question'表(帶有question_id和tag_id列)。限制Symfony2中的多對多關係結果
$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();
}
}