【发布时间】:2011-07-21 13:35:46
【问题描述】:
如何使用 Doctrine 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 引用来自Person 类上的@Id 注释,但如果我想改为创建person.ssn 的FK 怎么办(这是可以想象的,因为SSN 天生是唯一的)。
如果我有一个旧数据库,其中 employee.person_id 被称为 employee.p_id 怎么办?
【问题讨论】:
-
我认为它们必须是相同的(具有与父级相同的主键的子类),我记得目前有人谈论这是一个限制。希望稍后会尝试找到对此的参考。
-
谢谢。不过听起来很奇怪。我相信
doctrine orm:schema-tool:create想创建一个以employee.person_id作为外键的表,而不是employee.id。明天我回来工作时会检查。
标签: php sql inheritance doctrine-orm class-table-inheritance