Учение и ассоциация oneToOne и наследование классов - PullRequest
0 голосов
/ 04 июня 2018

У меня есть два класса:

class BaseIndividualIdentity {
    /**
     * @JMS\Exclude()
     * @ORM\Id
     * @ORM\Column(type="integer", nullable=false)
     * @ORM\GeneratedValue
     */
    protected $id;

    /**
     * @var IdentityDocument
     *                       
     * @ORM\OneToOne(targetEntity="IdentityDocument", orphanRemoval=true, cascade={"persist"})     
     * @ORM\JoinColumn(name="join_main_identity_document_id", referencedColumnName="id")          
     */
    protected $mainIdentityDocument;

и

class IndividualIdentity extends BaseIndividualIdentity {
}

Проблема заключается в том, что сгенерированный с помощью symfony / doctrine код postgressql (по doctrine: schema: update) выглядит так:

CREATE TABLE var.base_individual_identity (id INT NOT NULL, join_main_identity_document_id INT DEFAULT NULL, PRIMARY KEY(id));
CREATE TABLE var.individual_identity (id INT NOT NULL, PRIMARY KEY(id));

Аналогичный (ошибочно) результат для mysql.

Код для Individual_identity Мисс join_main_identity_document_id .

Но, например, когда япопытаться сохранить IndividualIdentity я получаю сообщение об ошибке:

 An exception occurred while executing 'INSERT INTO var.individual_identity (id, join_main_identity_document_id) VALUES (?, ?)' with params [1, 1]:       

  SQLSTATE[42703]: Undefined column: 7 ERROR:  column "join_main_identity_document_id" of relation "individual_identity" does not exist

Так что в этом контексте кажется, что наследование работает хорошо.Итак, мой вопрос, что я делаю не так?;)

1 Ответ

0 голосов
/ 04 июня 2018

Вы можете использовать Inheritance Mapping с аннотациями

/** @MappedSuperclass */
class MappedSuperclassBase
{
    /** @Column(type="integer") */
    protected $mapped1;
    /** @Column(type="string") */
    protected $mapped2;
    /**
     * @OneToOne(targetEntity="MappedSuperclassRelated1")
     * @JoinColumn(name="related1_id", referencedColumnName="id")
     */
    protected $mappedRelated1;

    // ... more fields and methods
}

См. Это

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...