【问题标题】:Doctrine2 - (how to) fetch associated objects with mainDoctrine2 - (如何)使用 main 获取关联对象
【发布时间】:2011-09-01 09:57:04
【问题描述】:

假设我在 Doctrine2 中有一个关联映射。

如何定义在查询主要对象时需要获取所有关联对象

实际上,如果我定义 (Main 1-* Sub) 然后访问 Sub 集合中的所有项目,Doctine 将执行单个 DB 请求以获取每个 Sub 对象。我需要在主查询 (JOIN) 中检索子对象。

欢迎评论或(最好)Doctrine RTM)

【问题讨论】:

    标签: php orm doctrine doctrine-orm


    【解决方案1】:

    如果您经常需要它(即始终获取所有关联),请声明您的关联 eager。详情请咨询Doctrine manual第17-19章。

    如果您只需要几段代码 - 使用 DQL 查询它们 (manual)。这样您就必须指定所有关联。

    $query = $em->createQuery("SELECT u, a FROM User u JOIN u.address a WHERE a.city = 'Berlin'");
    $users = $query->getResult();
    

    如果您要经常使用该查询,最好将其封装在 Entity 类中(简单,但不是最佳解决方案),或为实体创建 Repository(涉及更多一点,但“正确的方式”)。

    【讨论】:

      【解决方案2】:

      用户存储库

      public function getUsersFromCity($city): Collection
      {
        return $this->createQueryBuilder('u')
          ->leftJoin('u.address', 'a')
          ->addSelect('a')
          ->andWhere('a.city = :city')
          ->setParameter('city', $city)
          ->getQuery()
          ->getResult()
        ;
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多