Sto sperimentando con Doctrine ORM (v1.2) per PHP. Ho definito un "liquore" di classe, con due classi di bambini "gin" e "whisky". Uso l'ereditarietà concreta (ereditarietà delle tabelle di classe nella maggior parte della letteratura) per mappare le classi a tre tabelle di database separate.PHP doctrine 1.2 ORM - query polimorfiche con ereditarietà delle tabelle di classe
Sto tentando di eseguire il seguente:
$liquor_table = Doctrine_Core::getTable('liquor');
$liquors = $liquor_table->findAll();
Inizialmente, mi aspettavo $ liquori di essere un Doctrine_Collection contenente tutti i liquori, siano essi whisky o gin. Ma quando eseguo il codice, ottengo una collezione vuota, nonostante abbia diverse righe nelle tabelle del database whisky e gin. Sulla base dell'SQL generato, capisco perché: l'ORM sta interrogando la tabella "liquore" e non le tabelle whisky/gin in cui sono memorizzati i dati effettivi.
Si noti che il codice funziona perfettamente quando si passa il tipo di ereditarietà all'aggregazione di colonne (ereditarietà semplice della tabella).
Qual è il modo migliore per ottenere un Doctrine_Collection contenente tutti i liquori?
Aggiornamento
Dopo qualche ricerca, sembra che io mi aspetto dottrina da eseguendo un'operazione di SQL UNION
dietro le quinte per combinare i set di risultati dal "whiskey" e le tabelle "gin".
Questa è una query polimorfa .
In base a this ticket, questa funzionalità non è disponibile in Doctrine 1.x. È destinato alla versione 2.0. (vedi anche Doctrine 2.0 docs per CTI).
Quindi, alla luce di queste informazioni, quale sarebbe il modo più pulito e più efficace per ovviare a questa carenza? Passa all'ereditarietà di una tabella singola? Esegui due query DQL e unisci manualmente il risultato Doctrine_Collections?