Doctrine 2, DQL, řadit odběratele podle počtu objednávek

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Relapse
Člen | 34
+
0
-

Dobrý den,

prosím vás, mám jednoduchý vztah 1:N odběratel – objednávka.

vztah je zapsaný takto:
Subscriber entita:

/**
     * @ORM\OneToMany(targetEntity="Order", mappedBy="subscriber")
     */
    private $orders;

Order entita:

/**
    * @ORM\ManyToOne(targetEntity="Subscriber", inversedBy="orders")
    * @ORM\JoinColumn(name="subscriber_id", referencedColumnName="id")
    */
   private $subscriber;

Jak se dá v DQL zapsat dotaz, který mi vrátí všechny odběratele seřazené vzestupně podle počtu objednávek?

Zkoušel jsem zatím něco podobného jako:

SELECT s, o FROM Entity\Subscriber s JOIN s.orders o ORDER BY s.orders

ale nepodařilo se.

Začínám s Doctrine.
Děkuji.

David Matějka
Moderator | 6445
+
+1
-

Nesouvisi s nette.

Ale zkus:

SELECT s, SIZE(s.orders) AS HIDDEN orders FROM Entity\Subscriber s ORDER BY orders

nebo

SELECT s, SIZE(o.id) AS HIDDEN orders FROM Entity\Subscriber s JOIN s.orders o GROUP BY s.id ORDER BY orders

Od 2.5 by myslim melo fungovat pouziti te fce primo v ORDER BY bez nutnosti HIDDEN…

SELECT s FROM Entity\Subscriber s ORDER BY SIZE(s.orders)

Ale pri vetsim mnozstvi dat to muze byt neefektivni. Ja bych ulozil pocet objednavek do sloupecku u odberatele, aktualizovane treba triggerem.

Filip Procházka
Moderator | 4668
+
+2
-
SELECT s, COUNT(o.id) as HIDDEN ordersCount
FROM Entity\Subscriber s
JOIN s.orders o
ORDER BY ordersCount