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;

}

?>

...そして、私はIntegerParameterTypeParameterType を拡張し、次のように定義されているクラスを持っています:

<?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 で (可能であれば) それ自体の値を他のオブジェクトの値で上書きしますか?

前もって感謝します!

4

0 に答える 0