Doctrine 2.3 Criteria. Accessing a related Object

前端 未结 2 1869
北荒
北荒 2021-01-04 10:18

I am trying to set up a Criteria according to the Doctrine Docs.

Unfortunately they don\'t tell you how to access attributes of an related Object. Let me give you an

2条回答
  •  忘掉有多难
    2021-01-04 10:21

    That probably belongs in a repository method, rather than a filter method. If you're wanting to get a pre-filtered list of Products in a collection on a parent object (like an Order or something), you can filter the child collection in the query builder. However, you have to deal with the possibly confusing side-effect of not having fully hydrated objects.

    This should give you a list of Order objects, which only having Product children matching a category name.

    class OrderRepository extends EntityRepository {
      public function findOrderWithProductCategory($category)
      {
        $builder = $this->createQueryBuilder('o')
          ->select('o, p')
          ->leftJoin('o.products', 'p')
          ->join('p.category', 'c', 'WITH', 'c.name = :category')
          ->setParameter('category', $category);
      }
    }
    

    If you don't know what kind of categories you're interested until later, then you're probably better using @Flip's solution anyway, and pre-hydrating all the categories. Using partial hydration and standard ArrayCollection::filter() closures, performs pretty well in most cases.

    That said, it would be quite nice as a feature. I suspect the Doctrine guys would be reluctant because the current Criteria implementation is very light-weight and they probably want to keep it that way.

提交回复
热议问题