よし、ここでちょっとおかしなことがある。
私は 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
では、名前と基本型だけを持つ new が頻繁に与えられます。基本型は、別の名前を参照する文字列ですIntegerParameterType
(「uchar」や「ushort」など)。
私がやりたいことは、IntegerParameterType
ラベル付きの「baseType」に別のフィールドを入力し、その文字列をデータベース (MySQL) に保存することです。ただし、コードでこのオブジェクトを使用する場合は、そのベースIntegerParameterType
( ) のプロパティを一緒に使用する必要があります (基本的に、名前と baseType のみが付属する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 で (可能であれば) それ自体の値を他のオブジェクトの値で上書きしますか?
前もって感謝します!