好的,所以我在这里有点笨拙。
我正在使用 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 用另一个对象的值覆盖(如果可能的话)自身的值时?
提前致谢!