自引用,继承类,如何使用Doctrine2覆盖JOIN上的常用列值?

时间:2013-01-14 21:25:04

标签: php inheritance orm doctrine-orm associations

好吧,所以我在这里有点麻烦。

我正在使用Symfony2,但更具体地说是ORM,Doctrine2。我将以下课程写成ParameterType

<?php
namespace MSS\CMDBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 *  @ORM\Entity
 *  @ORM\Table(name="ParameterType")
 *  @ORM\InheritanceType("JOINED")
 *  @ORM\DiscriminatorColumn(name="discr", type="string")
 *  @ORM\DiscriminatorMap(
 *      {
 *          "integer" = "IntegerParameterType",
 *          "enumerated" = "EnumeratedParameterType"
 *      })
 */
class ParameterType {
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string", length=255)
     */
    protected $name;

    /**
     * @ORM\Column(type="integer")
     */
    protected $system;

}

?>

...我有一个扩展ParameterType的类IntegerParameterType,定义如下:

<?php
namespace MSS\CMDBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 *  @ORM\Entity
 *  @ORM\Table(name="IntegerParameterType")
 */
class IntegerParameterType extends ParameterType {
    /**
     * @ORM\Column(type="integer")
     */
    protected $sizeInBits;

    /**
     * @ORM\Column(type="boolean")
     */
    protected $signed;

    /**
     * @ORM\Column(type="string")
     */
    protected $units;

}

?>

...现在每隔一段时间我就会得到一个只有名字和基本类型的新IntegerParameterType。基类型是一个引用另一个IntegerParameterType的名称的字符串(类似“uchar”或“ushort”)。

我想要做的是将另一个字段输入IntegerParameterType标记为“baseType”并将该字符串存储在我的数据库(MySQL)中。但是,当我想在我的代码中使用此对象时,我希望该基础IntegerParameterTypeIPT)的属性与它一起出现(基本上覆盖将初始存储在{中的默认值) {1}}只带有名称和baseType)。

到目前为止,我尝试过尝试在IPT内部创建一个自引用属性,如下所示:

IntegerParameterType

但是,这不起作用,并且/** * @ORM\ManyToOne(targetEntity="IntegerParameterType") * @ORM\JoinColumn(name="baseType", referencedColumnName="name") */ protected $baseType;

出错

如何让这个类引用另一个General error: 1005 Can't create table... (errno: 150),并在JOIN覆盖(如果可能)自身的值和另一个对象的值?

提前致谢!

0 个答案:

没有答案