我有个问题。我想执行这个
$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
:之间的关系
/**
* @ORMOneToMany(
* targetEntity="EventSeans",
* cascade={"persist", "remove", "merge"},
* mappedBy="event"
* )
* @ORMOrderBy({"time"= "ASC"})
*/
protected $seanses;
最后,这是EventSeans
实体中的日期字段
/**
* @ORMColumn(name="date", type="date")
*/
protected $date;
请考虑一下,很难理解您的要求!我知道,当您将两个不同的日期传递给getEvents()
函数时,您总是会得到相同的结果。
您当前发布的代码似乎还可以,但您要做的是不要选择具有getEvents()
功能的Event
实体。
如果您准备好了QueryBuilder的查询,那么您正在选择EventSeans
实体,这样$region和$date就是您提供的!但您既没有选择Event
实体,也没有涉及Event
和EventSeans
实体之间的关系。
也许有更多的细节和更好的解释你的问题可能会有所帮助。
EDIT我认为您不应该同时选择Event
和EventSeanses
,因为一旦您从repo中检索到Event
,就可以从Event
实体中获取所有EventSeanses
对象。但我建议选择所有的EventSeanses
,以满足标准,然后直接从EventSeanses
对象中获得关联的Event
对象。干净简单。
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:你在Event
中按"时间"订购$seanses
,而不是按"日期"订购,这太奇怪了!