2

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を使用しています

4

2 に答える 2

1

保護されたフィールドをプライベートに変更すると役立ちます。

于 2014-01-09T16:19:23.580 に答える
0

それは大丈夫です。もちろん、変更したくない場合は、重複したものを削除できます。

于 2013-09-18T11:42:12.137 に答える