возможно ли сопоставление ассоциаций с условиями в Доктрине 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"})
Проблема в том, что, поскольку «одобренный» столбец является дискриминатором, я больше не могу использовать его как поле в сущности Комментарий.
Вы можете использовать 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 достаточно умен, чтобы перейти только в базу данных, если коллекция еще не была загружена.