首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Doctrine2类表继承实体ID

Doctrine2类表继承实体ID
EN

Stack Overflow用户
提问于 2016-11-25 15:01:31
回答 1查看 927关注 0票数 0

我有这种情况

代码语言:javascript
复制
<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>

生成实体时,我会添加继承。

代码语言:javascript
复制
class User {
 // Some code...
}

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

由于两个实体的"id“列名相同,所以当我试图更新数据库架构时,就会出现这个问题。我尝试添加属性覆盖,但我想这不是正确的方法

代码语言:javascript
复制
<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中更改属性名(而不是列名),但错误是相同的

代码语言:javascript
复制
 [Doctrine\ORM\Mapping\MappingException]
  Duplicate definition of column 'id' on entity 'Company\Entity\User\Guest' in a field or discriminator column mapping.

我必须更改客人的"id“列名吗?我哪里错了?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-06 10:48:08

若要使此问题的状态得到回答并从获得答复,请执行以下操作:

代码语言:javascript
复制
<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>

您必须删除继承表上的主键,因为它已经在母表上声明了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40807754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档