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()関数に 2 つの異なる日付を渡すと、常に同じ結果が得られることを理解しました。

現在投稿しているコードは問題ないようですがEvent、関数でエンティティを選択しないようにしますgetEvents()

QueryBuilder からクエリを準備するEventSeansと、$region と $date が提供されたものになるようにエンティティを選択することになります。ただし、エンティティを選択したり、エンティティEvent間の関係に関与したりすることはありません。EventEventSeans

おそらく、問題の詳細とより良い説明があれば、役立つかもしれません。


編集リポジトリから取得すると、エンティティからすべてのオブジェクトを取得できるため、と の両方Eventを 選択するべきではないと思います。ただし、基準が満たされるようにすべてを選択し、関連するオブジェクトをオブジェクトから直接取得することをお勧めします。きれいで簡単。EventSeansesEventSeansesEventEventEventSeansesEventEventSeanses

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 に答える