2009-12-16 14 views
2

J'ai deux tables "séries" et "programmes" avec des programmes allant de plusieurs à une série.Ordre de la doctrine par table de relations avec limite

table Série

id | name 
-------------- 
1 | lorem 
2 | ipsum 
3 | foo 
4 | bar 

Table Programmes

id | name  | series_id 
--------------------- 
1 | program1 | 1 
2 | program2 | 2 
3 | program3 | 3 
4 | program4 | 4 
5 | program5 | 1 
6 | program6 | 2 
7 | program7 | 3 
8 | program8 | 4 
9 | program9 | 1 
10 | program10 | 2 
11 | program11 | 1 
12 | program12 | 2 

Je voudrais dans Doctrine (1.2) pour obtenir les deux séries avec le dernier programme, dans cette série de cas 2, suivi de la série 1, voir les deux dernières lignes dans les programmes.

Je dirais:

$q = Doctrine_Query::create()->from('Series s') 
          ->leftJoin('s.Programs p') 
          ->orderBy('p.id desc') 
          ->limit(2); 

mais retourne série 4 et série 3. Le problème est que la doctrine utilise une requête distincte obtenir les ID avant de faire la requête où les données seront incluses, ils utilisent cette tactique, comme MySql ne peut pas utiliser la limite dans les sous-requêtes, je pense.

Mes questions, comment voulez-vous obtenir série 2 et série 1 via DQL?

Répondre

1

essayez ceci:

$q = Doctrine_Query::create() 
    ->select('s.name') 
    ->addSelect('(SELECT p.series_id FROM Programs p WHERE p.series_id = s.id) as series_name') 
    ->from('Series s'); 
    ->orderBy('p.id desc') 
    ->limit(2);