我有两个实体event
和participant
。他们有一种关系,就像每个活动都有很多参与者一样。
participants
具有已检查,可见等属性。
normaly我可以在我的控制器中做一些像$event->getParticipant();
。
现在什么是获得更具体选择的最佳方式?例如,我想实现以下一些功能:
$event->getVisibleParticipant();
$event->getCheckedParticipant();
$event->getVisibleAndCheckedParticipant();
我如何以及在哪里以最好的方式实现这些功能?
我试图实现一个EventRepository,但它说我要调用的方法是未定义的......
答案 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();
});
}