| 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: 12 let
|
|||
0