【问题标题】:How to annotate Doctrine field with inheritance mapping?如何使用继承映射注释 Doctrine 字段?
【发布时间】:2014-07-10 13:16:37
【问题描述】:

我有 2 个实体。

/**
 * Person
 *
 * @ORM\Table(name="person")
 * @ORM\Entity
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="role", type="string")
 * @ORM\DiscriminatorMap({"official" = "OfficialPerson"})
 *
 */
class Person
{
    /**
     * @var string
     *
     * @ORM\Column(name="role")
     */
    private $role = 'user';


    public function setRole($role)
    {
        $this->role = $role;
        return $this;
    }


    public function getRole()
    {
       return $this->role;
    }

}

/**
 * @ORM\Entity
 */
class OfficialPerson extends Person
{

} 

我需要为此字段设置 getter 和 setter,但它是实体 'Person' 上列 'role' 的重复定义。如何解决这个问题并保存 getter 和 setter?

我写的时候

* @ORM\DiscriminatorColumn(name="role", type="string")

* @ORM\Column(name="role")

在 Person 实体中,我得到一个错误

Duplicate definition of column 'role' on entity 'Person'

【问题讨论】:

  • 你想从OfficialPerson类中调用Person的setRolegetRole吗?
  • @AnjanaSilva 需要将字段中的属性“角色”映射到数据库中,并可以从对象访问它
  • @fr051k 实际上已经映射了 Person 类中的 setRolegetRole 方法。您可以通过在 OfficialPerson 类中声明两个新函数来扩展这两个函数。是这个意思吗?
  • @AnjanaSilva 当我写 * @ORM\DiscriminatorColumn(name="role", type="string") 和 * @ORM\Column(name="role") 我得到一个错误重复定义实体“人”上的“角色”列
  • 显然这是 Doctrine 的预期行为,解决它的唯一方法是创建自己的单独列,或使用 INSTANCEOF 进行查询或在代码中使用 get_class。见doctrine-project.org/jira/browse/DDC-911

标签: inheritance orm doctrine-orm mapping


【解决方案1】:

也许你也映射到了 YAML 文件中。所以它找到了两个映射,一个来自 YAML,一个来自 Annotations。尝试删除 Resources/config/doctrine/ 下的 Person.yml 文件。

希望这会有所帮助。

干杯!

【讨论】:

    猜你喜欢
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多