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”$日期是静止的,没有解析。也许我还没弄清楚!您必须发布完整的代码,否则查找“错误”将不容易!我们是程序员,不是魔术师嗯,你可以在你的问题中添加细节,而不是每次发现问题时都更改内容。