Doctrine 2のクラステーブル継承との外部キー関係に使用される列を指定するにはどうすればよいですか?たとえば、次の2つのクラスを考えてみましょう。
/**
* @Entity
* @InhertanceType("JOINED")
* @DiscriminatorColumn(name="type", type="string")
* @DiscriminatorMap("person" = "Person", "employee" = "Employee")
*/
class Person
{
/** @Id */
public $id;
/** @Column(type="string") */
public $ssn;
}
/** @Entity */
class Employee
{
/** @Column(type="decimal") */
public $salary;
}
これにより、Doctrineはこれに沿ったテーブル構造を期待しています。
CREATE TABLE `person` (
`id` INT(11) NOT NULL auto_increment,
`ssn` VARCHAR(255) default NULL,
PRIMARY_KEY(`id`)
)
CREATE TABLE `employee` (
`person_id` INT(11) NOT NULL,
`salary` DECIMAL(10,2) default NULL,
PRIMARY_KEY(`person_id`)
)
ALTER TABLE `employee`
ADD CONSTRAINT `person_fk` FOREIGN KEY (`person_id`)
REFERENCES `person` (`id`) ON DELETE CASCADE
employee.person_id
を指す外部キーがありますperson.id
。しかし、どの列を使用するかをDoctrineにどのように伝えることができますか?person.id
参照はクラスの@Id
アノテーションからのものであると思いますが、代わりPerson
にFKを作成したい場合はどうなりますかperson.ssn
(SSNは当然一意であるため、これは考えられます)。
また、代わりにemployee.person_id
が呼び出されるレガシーデータベースがある場合はどうなりますか?employee.p_id