Doctrine 2でクラステーブルの継承と外部キーの関係に使用される列を指定するにはどうすればよいですか?たとえば、次の2つのクラスを取る:Doctrine2でクラステーブル継承のための外部キー列を指定する方法は?
これにより/**
* @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はこの沿ってややテーブル構造を期待:person.id
を指す外部キーemployee.person_id
あり
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
。しかし、どうすればDoctrineにどのカラムを使用するように指示できますか? person.id
の参照は、Person
クラスの@Id
アノテーションから来ていますが、代わりにperson.ssn
にFKを作成したいと考えています(これはSSNが自然にユニークなので考えられます)。
employee.person_id
が代わりにemployee.p_id
と呼ばれる従来のデータベースを持っている場合はどうなりますか?
私はそれらが同一でなければならないと思います(親と同じ主キーを持つサブクラス)。後でそれを参照してください。 – Orbling
ありがとうございます。それは奇妙に聞こえる。 'doctrine orm:schema-tool:create 'は' employee.id'ではなく 'employee.person_id'を外部キーとして作成したかったと思います。明日私が仕事に戻ったときにチェックします。 –