2012-11-23 31 views
0

我遇到問題。我想執行這個如何在一個Action中執行兩個存儲庫功能

$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()代碼:

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(); 
} 

這是EventEventSeans之間的關係:

/** 
* @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

你是在問一個權限還是你想解決這個特定的問題? – JeanValjean

+0

我想解決我的問題。 第二個查詢返回reuslt with date ='2012-11-12' 爲什麼? – versh23

+0

我不知道,你沒有發佈完整的函數'getEvents()',但只有'QueryBuilde'r部分。我不知道$ date是一個'string'還是它被解析爲'DateTime'! – JeanValjean

回答

0

Pl很容易,考慮到你很難理解你要求的東西!我明白,當你將兩個不同的日期傳遞給getEvents()函數時,你總會得到相同的結果。

看來您目前發佈的代碼是正常的,但您要做的不是選擇具有getEvents()函數的Event實體。

如果您準備好您的QueryBuilder查詢,您將選擇EventSeans實體,以便$ region和$ date是您提供的實體!但是您也不是選擇Event實體,也不涉及EventEventSeans實體之間的關係。

也許有更多的細節和更好的解釋你的問題可以幫助。


編輯 我想你不應該選擇這兩個EventEventSeanses,因爲一旦你從回購檢索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而不是「日期」,真奇怪!

+0

對不起我的錯誤:(我再次更新我的帖子 – versh23

+0

那麼,你可以在你的問題中添加細節,而不是每次發現問題時更改內容 – JeanValjean

+0

我做了一個編輯我的答案! – JeanValjean

相關問題