2016-07-04 23 views
0

Ich habe eine Funktion, um alle "Tours By Network" für heute zu bekommen.Bestellen Sie ein Ergebnis von seiner PersistentCollection

Ich habe eine benutzerdefinierte Repository wie folgt aus:

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

} 

Die Tour Entity hat eine OneToMany Bezug auf eine Object Entity.

Ich würde jetzt gerne das Ganze durch die filiale Spalte in AppBundle:Object Spalte sortieren, die, wie Sie sehen können, nicht in der Abfrage ist, so kann ich nicht einfach einfach ORDER BY.

Ich versuchte

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

Aber das ändert nichts.

THIS sieht aus wie etwas, was ich tun muss, aber ich verstehe nicht, wo den EventListener? Ich glaube auch, dass ich die Abfrage vielleicht nur ändern muss?

+0

Die Annotation "@ORM \ OrderBy ({" filiale "=" DESC "})" bedeutet nur, dass es Ihre verwandten Objekte in dem Fall sortiert, wenn Sie $ tour-> getObjects(); – Alsatian

Antwort

0

Sie haben Ihre Objekttabelle verbinden:

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

} 

Zum Zeitpunkt Zustand zwischen einer Praxis ist besser als> = AND < =.

+0

Ich habe das auch versucht und es heißt '[Syntax Error] Zeile 0, Spalte 71: Fehler: Erwartet =, <, <=, <>,>,> =,! =, Bekam 'o'' – PrimuS

+0

Die Syntax 'JOIN p.object o' ist die normale Methode, um JOIN in DQL zu verwenden (ohne 'WHERE p.object = ...'). Ich weiß nicht warum du schreibst 'JOIN AppBundle: Schedule s'? Vielleicht ist das das Problem. – Alsatian

+0

Siehe hier: http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#joins – Alsatian