2016-11-25 2 views
0

я такая ситуацияDoctrine2 Класс таблица наследования Entity ID

<entity name="Company\Entity\User\User" table="usr_user" inheritance-type="JOINED"> 
    <unique-constraints> 
     <unique-constraint name="username_UNIQUE" columns="username" /> 
    </unique-constraints> 
    <discriminator-column name="discriminator" /> 
    <discriminator-map> 
     <discriminator-mapping value="guest" class="\Company\Entity\User\Guest"></discriminator-mapping> 
     <discriminator-mapping value="user" class="\Company\Entity\User\User"></discriminator-mapping> 
    </discriminator-map> 
    <id name="id" type="integer" column="id"> 
     <generator strategy="AUTO" /> 
    </id> 
    <field name="username" type="string" column="username" length="255" /> 
    <field name="password" type="string" column="password" length="50" /> 
</entity> 

<entity name="Company\Entity\User\Guest" table="usr_guest"> 
    <id name="id" type="integer" column="id"> 
     <generator strategy="AUTO" /> 
    </id> 
    <field name="additionalField1" type="string" column="additional_field_1" length="255" /> 
    <field name="additionalField1" type="string" column="additional_field_2" length="255" /> 
</entity> 

Когда я генерировать сущности я добавить уделом

class User { 
// Some code... 
} 

class Guest extends User{ 
// Some code... 
} 

Проблема возникает Whe я пытаюсь обновить схему базы данных из-за того же " id "имя столбца обоих объектов. Я tryied добавить переопределение атрибутов, но я предполагаю, что это не правильный способ

<entity name="Company\Entity\User\Guest" table="usr_guest"> 

    <id name="id" type="integer" column="id"> 
     <generator strategy="AUTO" /> 
    </id> 
    <field name="additionalField1" type="string" column="additional_field_1" length="255" /> 
    <field name="additionalField1" type="string" column="additional_field_2" length="255" /> 
    <attribute-override name="id"> 
       <field column="guest_id" /> 
      </attribute-override> 
</entity> 

Я tryied также изменить имя свойства (а не имя столбца) в guest_id но ошибка такая же

[Doctrine\ORM\Mapping\MappingException] 
    Duplicate definition of column 'id' on entity 'Company\Entity\User\Guest' in a field or discriminator column mapping. 

Должен ли я изменить имя столбца «id» гостя? Где я ошибаюсь?

Спасибо

+1

Я думаю, вы можете удалить id из сущности Guest! Посмотрите на http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html Почему вы выбрали XML для сопоставления? Странный выбор?!? –

+0

@MathieuDormeval Я удалил из xml идентификатор, как вы предложили. Doctrine сгенерировала поле id в схеме db. Меня беспокоило все сущности, которые содержали ссылку на объект (таблицу) гостя через guest.id. Кажется также, что все эти объекты не имели проблем из-за поля guest.id, сгенерированного ORM. Надеюсь (надеюсь), это правильный путь. –

+0

OK сделайте свои тесты, у вас есть еще одна проблема, скажите нам! –

ответ

0

Для того, чтобы статус этого вопроса в ответ от this:

<entity name="Company\Entity\User\Guest" table="usr_guest"> 
    <field name="additionalField1" type="string" column="additional_field_1" length="255" /> 
    <field name="additionalField1" type="string" column="additional_field_2" length="255" /> 
    <attribute-override name="id"> 
     <field column="guest_id" /> 
    </attribute-override> 
</entity> 

<entity name="Company\Entity\User\User" table="usr_user" inheritance-type="JOINED"> 
    <id name="id" type="integer" column="id"> 
     <generator strategy="AUTO" /> 
    </id> 
    <unique-constraints> 
     <unique-constraint name="username_UNIQUE" columns="username" /> 
    </unique-constraints> 
    <discriminator-column name="discriminator" /> 
    <discriminator-map> 
     <discriminator-mapping value="guest" class="\Company\Entity\User\Guest"></discriminator-mapping> 
     <discriminator-mapping value="user" class="\Company\Entity\User\User"></discriminator-mapping> 
    </discriminator-map> 
    <field name="username" type="string" column="username" length="255" /> 
    <field name="password" type="string" column="password" length="50" /> 
</entity> 

Вы должны удалить первичный ключ на унаследованной столе, так как он уже заявил на материнском столе.

Смежные вопросы