Symfony2 - 如何仅获取/加入具有特定条件(一对多关系)的相关实体?

时间:2013-10-26 12:49:00

标签: symfony doctrine

我在事件和参与者实体之间存在着一种关系。 在我的控制器中,我可以执行以下操作:

$participants = $event->getParticipant();

但现在我只想要属性visible具有值1的参与者。

我怎样才能获得这些收藏品?因为参与者是事件实体中participant.event_id = event.id的所有参与者的数组集。

1 个答案:

答案 0 :(得分:1)

您可以轻松地在EventRepository中创建一个方法,该方法仅将可见参与者与事件相关联:

// YourBundle/Entity/EventRepository.php

public function getEventFilterVisibleParticipants($event_id)
{
    return $repository->createQueryBuilder('event')
        ->where('event.id = :event_id')
        ->leftJoin('event.participants', 'participant', 'WITH', 'participant.visible = :visibility')
        ->setParameter('event_id', $event_id)
        ->setParameter('visibility', 1)
        ->orderBy('event.startDate', 'DESC')
        ->getQuery()
        ->getResult()
    ;
}

...现在在您的控制器中执行以下操作:

$event = $this
    ->getDoctrine()
    ->getRepository('YourBundle:Event')
    ->getEventFilterVisibleParticipants($id)
;

$participants = $event->getParticipants(); // returns the filtered collection