2016-06-02 9 views
1

Ich schreibe eine Abfrage in DQL, wo ich die letzte Bestellung von einem Kunden auswählen möchte. Momentan habe ich nur alle Bestellungen bekommen und sie basierend auf ihrem Datum in absteigender Reihenfolge bekommen. Was bedeutet, dass ich es filtern muss, um pro Benutzer zu gehen, sowie ihren letzten Eintrag gerade auszuwählen. Meine Kenntnisse über DQL und Abfragen im Allgemeinen sind jedoch nicht so hoch, dass ich feststecke. Irgendeine Hilfe, wie man meine Frage fortsetzt, würde geschätzt werden.DQL: nur letzter Eintrag von einem Kunden

public function getLatestOrder($customer){ 
    // get the latest order from a customer 

    $em = $this->getEntityManager(); 

    $q1 = $em->getRepository('AppBundle:Order')->createQueryBuilder('o') 
    ->leftjoin("AppBundle:User", "u") 
    ->where("u.id = :customer_user_id") 
    ->setParameter('customer_user_id', $customer) 
    ->orderBy('o.date', 'DESC'); 

    $q1 = $q1->getQuery(); 
    $res1 = $q1->getResult(); 



    return $res1;  
} 

Zusätzliche Informationen: Die Bestelleinheit hat eine Kundenspalte, die auf die Benutzerinformationen verweist.

+0

was über die Verwendung von -> setMaxResluts (1)? http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#first-and-max-result-items-dql-query-only – Petr

+0

danke das hat funktioniert, aber ich stille habe mehrere Kunden, die alle unterschiedliche Bestellungen haben. Wissen von dem, was ich gesagt habe, um "zu filtern" für das muss ich noch diese Abfrage erweitern, Problem ist, ich weiß nicht wirklich, wie – KevinTheGreat

+0

Versuchen Sie -> Join statt -> leftJoin. LEFT JOIN gibt alle Aufträge zurück, egal ob es einen Benutzer gibt (passend zur WHERE-Klasse) oder nicht. (BTW, Sie verwenden nicht DQL, sondern den QueryBuilder) – Petr

Antwort

0

Anstatt besser beizutreten, können Sie Unterabfragen verwenden.

0

Sie können dies versuchen:

$em->getRepository('AppBundle:Order')->createQueryBuilder('o') 
->leftjoin("AppBundle:User", "u") 
->leftjoin("AppBundle:Order", "laterOrder", 'WITH', 'laterOrder.date > o.date') 
->where("u.id = :customer_user_id") 
->andWhere("laterOrder is null") 
Verwandte Themen