我有问题。我想执行这个
$events1 = $em->getRepository('AfishaBundle:Event')->getEvents($this->getCurrentRegion(),'2012-11-12');
//$event_repo->clear();`
$events2 = $em->getRepository('AfishaBundle:Event')->getEvents($this->getCurrentRegion(),'2012-11-13');
foreach($events2 as $event){
die(var_dump($event->getSeanses()->toArray()));
}
但是结果返回第一个日期=“2012-11-12”
当我不使用$event_repo->clear();
没关系,但我有 Twig 渲染的问题。
我可以在没有clear()
方法的情况下执行此操作吗?如果我不能,请发表评论。
为了完整起见,这是getEvents()
代码:
public function getEvents($region, $date){
$qb = $this->_em->createQueryBuilder();
$qb
->select('e,s')
->from('AfishaBundle:Event', 'e')
->leftJoin('e.seanses', 's')
->andWhere('s.date = :date')
->andWhere('s.region = :region')
->setParameter('region', $region)
->setParameter('date',$date)
;
return $qb->getQuery()->getResult();
}
这是Event
和EventSeans
:
/**
* @ORM\OneToMany(
* targetEntity="EventSeans",
* cascade={"persist", "remove", "merge"},
* mappedBy="event"
* )
* @ORM\OrderBy({"time"= "ASC"})
*/
protected $seanses;
最后,这是EventSeans
实体
/**
* @ORM\Column(name="date", type="date")
*/
protected $date;
答案 0 :(得分:0)
请注意,很难理解你的要求!我知道当你将两个不同的日期传递给getEvents()
函数时,你总会得到相同的结果。
您目前发布的代码似乎没问题,但您要做的不是选择Event
具有getEvents()
功能的实体。
如果您准备好QueryBuilder的查询,则选择EventSeans
个实体,以便$ region和$ date是您提供的实体!但您既未选择Event
实体,也未涉及Event
和EventSeans
实体之间的关系。
也许有更多细节和对问题的更好解释可能有所帮助。
修改强>
我认为您不应同时选择Event
和EventSeanses
,因为从repo检索EventSeanses
后,您可以从Event
实体获取所有Event
个对象。但我建议选择所有EventSeanses
以满足条件,然后直接从Event
对象获取关联的EventSeanses
对象。干净又简单。
public function getEventSeanses($region, $date){
$qb = $this->_em->createQueryBuilder();
$qb
->select('s')
->from('AfishaBundle:EventSeanses', 's')
->andWhere("s.date = ':date'")
->andWhere('s.region = :region')
->setParameter('region', $region)
->setParameter('date',$date)
;
return $qb->getQuery()->getResult();
}
请注意,在SQL中,您应该添加字符串(如日期),如下所示'date'
,而不仅仅是date
。
然后,在您的控制器中,您应该执行以下操作:
$events = array();
$region=...
$date=....//year-month-day
$eventseansesList = $em->getRepository('AfishaBundle:EventSeanses')->getEventSeanses($region,$date);
foreach($eventseansesList as $es){
$events[] $es->getEvent(); // this function retrieve the Event associated to the EventSeanses
}
PS:您在$seanses
中按“时间”而不是“日期”订购Event
,这很奇怪!