Symfony 如何在一个操作中执行两个存储库功能
我有个问题。我想执行这个Symfony 如何在一个操作中执行两个存储库功能,symfony,doctrine-orm,twig,query-builder,Symfony,Doctrine Orm,Twig,Query Builder,我有个问题。我想执行这个 $events1 = $em->getRepository('AfishaBundle:Event')->getEvents($this->getCurrentRegion(),'2012-11-12'); //$event_repo->clear();` $events2 = $em->getRepository('AfishaBundle:Event')->getEvents($this->getCurrentRegio
$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()时代码>
这没关系,但我对细枝渲染有问题。
我可以不使用clear()
方法执行此操作吗?如果我不能,请评论
为完整起见,这是getEvents()
code:
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();
}
这是事件
和事件之间的关系:
/**
* @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;
请考虑一下,你真的很难理解你的要求!我知道,当您将两个不同的日期传递给getEvents()
函数时,总是会得到相同的结果
您当前发布的代码似乎没有问题,但您要做的不是使用getEvents()
函数选择Event
实体
如果您准备好了来自QueryBuilder的查询,那么您正在选择EventSeans
实体,这样$region和$date就是您提供的实体!但您既没有选择事件
实体,也没有涉及事件
和事件之间的关系
也许有更多的细节和更好的解释,你的问题可以帮助
编辑
我认为您不应该同时选择Event
和EventSeanses
,因为一旦从repo检索事件
,您就可以从事件
实体中获取所有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
然后,在控制器中,您应该执行以下操作:
$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
}
注:您在事件中按“时间”而不是按“日期”订购$seanses
,这很奇怪 你是在请求许可还是想解决这样一个特定的问题?我想解决我的问题。第二个查询返回reuslt,日期为'2012-11-12'为什么?我不知道,您没有发布完整的函数getEvents()
,但只发布了QueryBuilde
r部分。我不知道$date是否仍然是字符串
,或者它被解析为日期时间
!在查询生成器第一部分之后,返回一个结果“getquery->getresult”$日期是静止的,没有解析。也许我还没弄清楚!您必须发布完整的代码,否则查找“错误”将不容易!我们是程序员,不是魔术师嗯,你可以在你的问题中添加细节,而不是每次发现问题时都更改内容。