Person
とは 2 つの異なる「もの」であるためEmployee
、Person エンティティと 1 対 1 の関係を持つ Employee エンティティを作成する必要があります。これは、Employee が常に Person であることを意味しますが、Person は必ずしも Employee であるとは限りません。
class Employee
{
/**
* @ORM\OneToOne(targetEntity="Acme\PersonBundle\Entity\Person", cascade={"persist"})
* @ORM\JoinColumn(referencedColumnName="id", nullable=true)
*/
protected $person;
}
これにより、既存のすべてのプロパティを備えた Person エンティティを保持できるため、データを複製する必要がなくなります (これは決して良い考えではありません)。最も重要なことは、2 つのオブジェクト タイプを分離することです。
@Zeljko が述べたように、タイプ フィールド フィールドを作成することもできますが、データを正規化する私のアプローチははるかにクリーンであると思います。複数のタイプの従業員が必要な場合は、EmployeeType テーブルを作成し、Employee エンティティに EmployeeType_ID を含めることができます。この方法は、乱雑になりがちで保守が困難になりがちな定数を使用するよりもはるかにクリーンです。