Отображение ассоциации Doctrine2 с условиями

возможно ли сопоставление ассоциаций с условиями в Доктрине 2.4? У меня есть сущность статьи и комментарий. Комментарии должны быть одобрены администратором. Статус одобрения комментариев сохраняется в логическом поле «одобрено».

Теперь у меня есть сопоставление ассоциации @OneToMany с комментариями в сущности Article. Он отображает все комментарии. Но я хотел бы наметить только одобренные комментарии.

Что-то вроде

@ORM\OneToMany(targetEntity="Comment", where="approved=true", mappedBy="article") 

было бы очень полезно. К сожалению, AFAIK не существует такой вещи, как условие при отображении, поэтому я попытался решить свою проблему с наследованием – я создал два подкласса класса Comment. Теперь у меня есть ApprovedComment и NotApprovedComment и SINLE_TABLE сопоставление наследования.

  @ORM\InheritanceType("SINGLE_TABLE") @ORM\DiscriminatorColumn(name="approved", type="integer") @ORM\DiscriminatorMap({1 = "ApprovedComment", 0 = "NotApprovedComment"}) 

Проблема в том, что, поскольку «одобренный» столбец является дискриминатором, я больше не могу использовать его как поле в сущности Комментарий.

Solutions Collecting From Web of "Отображение ассоциации Doctrine2 с условиями"

Вы можете использовать API критериев для фильтрации коллекции :

 <?php use Doctrine\Common\Collections\Criteria; class Article { /** * @ORM\OneToMany(targetEntity="Comment", mappedBy="article") */ protected $comments; public function getComments($showPending = false) { $criteria = Criteria::create(); if ($showPending !== true) { $criteria->where(Criteria::expr()->eq('approved', true)); } return $this->comments->matching($criteria); } } 

Это особенно приятно, потому что Doctrine достаточно умен, чтобы перейти только в базу данных, если коллекция еще не была загружена.