【问题标题】:Limit many-to-many relation result in Symfony2在 Symfony2 中限制多对多关系结果
【发布时间】:2012-12-25 08:15:28
【问题描述】:

我有两个实体 Question 和 Tag。它们之间存在多对多关系,并且生成了一个'tag_question'表(带有question_id和tag_id列)。

$questions = $tag->getQuestion();

执行此操作时,它返回所有结果,所有带有标签的问题。该方法由 Tag 实体中的 Doctrine2 自动生成。如何限制结果(添加分页等)?

【问题讨论】:

    标签: symfony doctrine-orm


    【解决方案1】:

    如果性能对您来说不是一个大问题,那么使用 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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-06-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多