0

我有个问题。我想执行这个

$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;
4

1 回答 1

0

请考虑一下,很难理解您的要求!我知道当您将两个不同的日期传递给getEvents()函数时,您总是会得到相同的结果。

您当前发布的代码似乎还可以,但是您要做的不是选择具有该功能的Event实体。getEvents()

如果您准备好来自 QueryBuilder 的查询,则您选择的EventSeans实体是 $region 和 $date 是您提供的实体!但是您既不选择实体,也不涉及实体之间的Event关系。EventEventSeans

也许对您的问题有更多详细信息和更好的解释可能会有所帮助。


编辑 我认为你不应该同时选择Eventand ,因为一旦你从 repo 中检索到,你就可以从实体EventSeanses中获取所有EventSeanses对象。但我建议选择所有满足条件的对象,然后直接从对象中获取关联对象。干净又容易。EventEventEventSeansesEventEventSeanses

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而不是“日期”排序,这很奇怪!

于 2012-11-25T12:17:17.383 回答