Mám entity News a Page propojené pomocí Class Table Inheritance. Zjednodušeně nějak takto:
/**
* Description of Page
* @Entity
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="type", type="string")
* @DiscriminatorMap({
* "news" = "News" ,
* "page" = "Page"})
*
* @table(
* name="pages"
* )
*/
class Page extends BaseEntity {...}
class News extends Page {...}
Vybrat jenom entity typu news můžu jednoduše SELECT ... FROM News
n, je ale nějakým způsobem možný získat jenom entity typu page,
který je mapovaný na tu rozšiřovanou třídu? Nebo musím vytvořit ještě
extra entitu rozšiřující Page a dotazovat se přes ni?
Mám takové tušení že by mělo stačit jí uvést v discriminatorMap což máš. Nefunguje to?
Sorry my bad english.
Vrtak-CZ | Nella Project | Osobní Blog | Twitter | LinkedIn | GitHub
„Nastala chyba která neměla nastat“ aneb „Když se chce
všechno jde.“
No právě že ne. DQL, které leze z Query Builderu je SELECT ...
FROM Page p INNER JOIN p.category c INNER JOIN p.user u WHERE ... ale
přeloží se to na dotaz přes všechny entity, které dědí od Page a vrací
to všechno…
A WHERE na DiscriminatorColumn taky nefunguje, protože není součástí entity… :(
EDIT: Tak jsem se zeptal v doctrine-user group a do hodiny měl řešení – INSTANCE OF ve WHERE… :-)
http://groups.google.com/…52ed447204e2
Editoval Quinix (22. 2. 2011 17:25)