好吧,所以我在这里有点麻烦。
我正在使用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)中。但是,当我想在我的代码中使用此对象时,我希望该基础IntegerParameterType
(IPT
)的属性与它一起出现(基本上覆盖将初始存储在{中的默认值) {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覆盖(如果可能)自身的值和另一个对象的值?
提前致谢!