如何在Doctrine 2中使用Class Table Inheritance指定用於外鍵關係的列?例如,採取以下兩類:如何在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;
}
有了這個,沿着學說這個有點希望的表結構:
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
有指向person.id
外鍵employee.person_id
。但我怎麼能告訴教義哪些列使用?我假設person.id
參考來自@Id
註釋上Person
類,但如果我想創建FK到person.ssn
,而不是(這是可以想象的,因爲SSN自然是唯一的)。
如果我有一個遺留數據庫,employee.person_id
被調用employee.p_id
會怎樣呢?
我認爲他們必須是相同的(子類具有相同的主鍵父母),我記得有的談這個是目前的限制。稍後會試着找到一個參考。 – Orbling
謝謝。這聽起來很奇怪。我相信'doctrine orm:schema-tool:create'想創建一個以'employee.person_id'作爲外鍵,而不是'employee.id'的表。當我回來工作時我會檢查明天。 –