0

我有两个实体,event并且participant. 他们有关系,就像每个事件都可以有很多参与者一样。

participants具有已选中、可见等属性。

$event->getParticipant();通常我可以在我的控制器中做一些类似的事情。

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

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

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

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

4

1 回答 1

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();
  });
}
于 2013-10-28T15:51:36.357 回答