2

好的,所以我在这里有点笨拙。

我正在使用 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;

}

?>

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

<?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)中。但是,当我想在我的代码中使用此对象时,我希望该基IntegerParameterType( IPT) 的属性随之而来(基本上覆盖最初存储在IPT仅带有名称和基类型的默认值)。

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

/**
 * @ORM\ManyToOne(targetEntity="IntegerParameterType")
 * @ORM\JoinColumn(name="baseType", referencedColumnName="name")
 */
protected $baseType;

但是,这不起作用并且错误General error: 1005 Can't create table... (errno: 150)

我怎样才能让这个类引用另一个IntegerParameterType,并在 JOIN 用另一个对象的值覆盖(如果可能的话)自身的值时?

提前致谢!

4

0 回答 0