基本Symfony 2对象 - 实体理解

时间:2013-10-28 15:35:18

标签: symfony

我有两个实体eventparticipant。他们有一种关系,就像每个活动都有很多参与者一样。

participants具有已检查,可见等属性。

normaly我可以在我的控制器中做一些像$event->getParticipant();

现在什么是获得更具体选择的最佳方式?例如,我想实现以下一些功能:

$event->getVisibleParticipant();
$event->getCheckedParticipant();
$event->getVisibleAndCheckedParticipant();

我如何以及在哪里以最好的方式实现这些功能?

我试图实现一个EventRepository,但它说我要调用的方法是未定义的......

1 个答案:

答案 0 :(得分:1)

使用Doctrine的filter集合方法

,您最好能够做到这一点

http://api.nellafw.org/class-Doctrine.Common.Collections.ArrayCollection.html

因此,在您的Event实体上,我们假设您的关系看起来像这样

<?php

namespace /Your/Bundle/Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * @ORM\Table()
 * @ORM\Entity()
 */
class Event
{
  /**
   * @ORM\OneToMany(targetEntity="Participant", mappedBy="event")
   */
  protected $participants;

  public function __construct()
  {
    $this->participants = new ArrayCollection();
  }
}

所以你需要做的就是添加一个查询方法(到Event实体),它将使用Doctrine集合的过滤功能

/**
 * Retrieves all associated participants that are visible
 *
 * @return \Doctrine\Common\Collections\ArrayCollection
 */
public function getVisibleParticipants()
{
  return $this->participants->filter( function( Participant $participant )
  {
    // Add only visible participants to the returned collection
    return (boolean) $participant->getVisible();
  });
}