Class Table Inheritance を使用すると、Doctrine 2 は親クラスのプロパティを子クラスに複製します。
例:
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="Entity\MyParentRepository")
* @ORM\Table(name="my_parent")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({"my_child" = "MyChild"})
*/
class MyParent
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=100)
*/
protected $code;
}
/**
* @ORM\Entity(repositoryClass="Entity\MyChildRepository")
* @ORM\Table(name="my_child")
*/
class MyChild extends MyParent
{
/**
* @ORM\Column(type="string", length=100)
*/
protected $name;
}
doctrine:generate:entities を呼び出すと、クラス MyChild は次のように変更されます。
/**
* @ORM\Entity(repositoryClass="Rail\RussiaBundle\Entity\MyChildRepository")
* @ORM\Table(name="my_child")
*/
class MyChild extends MyParent
{
/**
* @ORM\Column(type="string", length=100)
*/
protected $name;
/**
* @var integer
*/
private $id;
/**
* @var string
*/
private $code;
}
(私は生成されたメソッドを省略しました)
ご覧のとおり、プロパティ $id と $code がクラス MyChild にコピーされます。
私が間違っていることは何ですか?クラステーブル継承の正しい構文は何ですか?
Doctrine 2.3.4を使用しています