Doctrine2 Class table 继承实体ID
Doctrine2 Class table inheritance 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...
}
当我尝试更新数据库架构时出现问题,因为两个实体的 "id" 列名称相同。我尝试添加属性覆盖,但我想这不是正确的方法
<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>
我也尝试过更改 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" 列名称?
我哪里错了?
谢谢
为了使这个问题的状态变为已回答来自 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>
您必须删除继承 table 上的主键,因为它已在母 table 上声明。
我有这种情况
<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...
}
当我尝试更新数据库架构时出现问题,因为两个实体的 "id" 列名称相同。我尝试添加属性覆盖,但我想这不是正确的方法
<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>
我也尝试过更改 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" 列名称? 我哪里错了?
谢谢
为了使这个问题的状态变为已回答来自 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>
您必须删除继承 table 上的主键,因为它已在母 table 上声明。