2016-11-25 13 views
0

私は私が継承を追加するエンティティDoctrine2クラステーブル継承エンティティID

class User { 
// Some code... 
} 

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

を生成するとき、私は、データベーススキーマを更新しようWHEこの状況は

<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> 

問題が「あるため同じで表示されてい両方のエンティティの「id」列名。私は、属性のオーバーライドを追加するtryiedましたが、私はこれは私がguest_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> 

適切な方法ではないと思いますが、エラーは同じ

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

ゲストの「id」列名を変更する必要がありますか? どこが間違っていますか?

が答えにしてthisから、この質問の状態を作るためにあなたに

+1

私はエンティティゲストからIDを削除できると思います! http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.htmlを見てください。なぜマッピングのためにXMLを選択しましたか?奇妙な選択?!? –

+0

@MathieuDormevalあなたが示唆したようにxmlからIDを削除しました。 Doctrineはdbスキーマ内にidフィールドを生成しました。私はguest.idを介してGuestエンティティ(テーブル)への参照を保持していたすべてのエンティティについて心配していました。これらのエンティティはORMによって生成されたguest.idフィールドのために問題ありませんでした。私はこれが正しい方法だと思います(希望)。 –

+0

OKテストをする、私はあなたにいくつかの他の問題がある、私たちに教えて! –

答えて

0

ありがとう:

<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> 

それはすでに母親テーブルの上に宣言されますので、あなたは、継承されたテーブルの主キーを削除する必要があります。

関連する問題