Autor | Zpráva | ||
---|---|---|---|
aDAm Profil |
#1 · Zasláno: 11. 5. 2014, 20:28:54
Je nějak možné si v doctine2 vytvořit entitu a v ní relaci na druhou entitu ale přes dva sloupce a ještě s rozdělením inheritance?
Mám entitu komentáře která mimo jiné obsahuje další prvky, ale ten hlavní je author: /** * @ORM\Entity * @ORM\Table(name="comments") */ class Comment { /** * @ORM\ManyToOne(targetEntity="Entities\Authors\Guest", cascade={"persist"}) * @ORM\JoinColumns({ * @ORM\JoinColumn(name="author_id", referencedColumnName="author_id", nullable=FALSE), * @ORM\JoinColumn(name="author_type", referencedColumnName="author_type", nullable=FALSE) * }) **/ protected $author; } Autoři mohou být entity: Guest, System, Facebook, Twitter.... Co chci docíli je aby když načtu entitu komentáře abych měl i toho správneho autora, tedy pokud byl autor lognutý přes FB tak se vrátí entita Facebook která extenduje Guest V podstatě tohle mě funguje, problém ale nastane při ukládání, protože author type je sloupec použitý v discriminator map: /** * @ORM\Entity * @ORM\Table(name="authors") * @ORM\InheritanceType("SINGLE_TABLE") * @ORM\DiscriminatorColumn(name="author_type", type="string") * @ORM\DiscriminatorMap({ * "guest" = "Guest", * "system" = "System", * "facebook" = "Facebook", * "twitter" = "Twitter", * "google" = "Google", * "github" = "Github" * }) */ class Guest { } A při ukládání komentáře dojde k problému při ve sloupci author_type protože ten v relační entitě není namapován. Pokud tu relaci author v entitě Comment upravím tak že bude pouze join přes author_id tak se při uložení špatně vyplní author_type Zkoušel sem se ptát strejdy google co a jak a zatím bezúspěšně, jediné řešení bylo přidat si do tabulky autorů duplicitní sloupec author_type_cokoliv který bude nabývat stejných hodnot a bude použit pro vazbu. Není to moc košér řešení ale nic jiného jsem nenašel. Dalším řešením mě napadá je změnit generování author_id. Není to automaticky, toto ID je generováno resp získáno podle konkrétního typu, FB dodává vlastní ID, twitter taky atd a primary key je tedy author_id a author_type pro případ že by sešly dvě stejné ID. To co mě napadlo je že při vytváření id jej udělat např. v podobě fb_123456, tj. dát tomu IDčku prefix konkrétního typu, tudíž se bude dělat vazba pouze přes jeden sloupec a teoreticky by to mohlo řešit stávající problém Co vy na to? Setkal se s tím už někdo? Případně jak jinak to řešit? |
||
Časová prodleva: 10 let
|
0