2016-07-04 17 views
0

私は今日、すべての "Tours By Network"を取得する機能を持っています。PersistentCollectionで結果を注文

public function toursTodayByNetwork($network){ 

    $todayStart = \DateTime::createFromFormat("Y-m-d H:i:s", date("Y-m-d 00:00:00")); 
    $todayEnd = \DateTime::createFromFormat("Y-m-d H:i:s", date("Y-m-d 23:59:59")); 

    return $this->getEntityManager() 
     ->createQuery(
      'SELECT p FROM AppBundle:Tour p JOIN AppBundle:Schedule s WHERE p.id = s.tour AND p.network = :network AND s.start >= :todayStart AND s.start <= :todayEnd' 
     ) 
     ->setParameter('todayStart',$todayStart) 
     ->setParameter('todayEnd',$todayEnd) 
     ->setParameter('network',$network) 
     ->getResult(); 

} 

TourエンティティがObjectエンティティにOneToMany関係を持っています

私はこのようなカスタムリポジトリを持っています。

filialeの列で全体を並べ替えるのはAppBundle:Objectです。これはクエリには表示されないので、単にORDER BYとすることはできません。

は私が

/** 
* @ORM\OneToMany(targetEntity="Object", mappedBy="tour") 
* @ORM\OrderBy({"filiale" = "DESC"}) 
*/ 
protected $object; 

を試してみましたしかし、それは何も変わりません。

THIS私は何かのように見えますが、どこにEventListenerを配置するのか分かりません。私はおそらく、単にクエリを変更する必要があるとも信じていますか?

+0

注釈 "@ORM \ OrderBy({" filiale "=" DESC "})"は、$ tour-> getObjects()を実行したときに関連オブジェクトをソートすることを意味します。 – Alsatian

答えて

0

あなたがオブジェクト表を結合する必要があります:> = AND < =として、より良い練習の間の、

public function toursTodayByNetwork($network){ 

    $todayStart = \DateTime::createFromFormat("Y-m-d H:i:s", date("Y-m-d 00:00:00")); 
    $todayEnd = \DateTime::createFromFormat("Y-m-d H:i:s", date("Y-m-d 23:59:59")); 

    return $this->getEntityManager() 
     ->createQuery(
      'SELECT p FROM AppBundle:Tour p JOIN p.schedule s JOIN p.object o WHERE p.network = :network AND s.start BETWEEN :todayStart AND :todayEnd ORDER BY o.filiale DESC' 
     ) 
     ->setParameter('todayStart',$todayStart) 
     ->setParameter('todayEnd',$todayEnd) 
     ->setParameter('network',$network) 
     ->getResult(); 

} 

日付条件について。

+0

私もそれを試しましたが、 '[Syntax Error] line 0、col 71:Error:Expected =、<, <=, <>、>、> =、!=、 'o'を取得しました ' – PrimuS

+0

構文' JOIN p.object o ' DQLでJOINを使用する通常の方法です( 'WHERE p.object = ...'なし)。私はあなたの書き込み 'JOIN AppBundle:Schedule s'をなぜ書くのですか?それは問題かもしれません。 – Alsatian

+0

ここをクリックしてください:http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#joins – Alsatian