Autor Zpráva
aDAm
Profil
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?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0