2
私人性質,而閱讀Doctrine documentation,我發現這個例子:查詢父的原則
/**
* @Entity
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
*/
class Person
{
/**
* @Id @Column(type="integer")
* @GeneratedValue
*/
protected $id;
/**
* @Column(type="string", length=50)
*/
protected $name;
}
/**
* @Entity
*/
class Employee extends Person
{
/**
* @Column(type="string", length=50)
*/
private $department;
}
根據該文檔時,Employee
類可以查詢這樣:
SELECT e FROM Entities\Employee e WHERE e.name = 'test';
我的問題是:如果Person
和Employee
都具有name
屬性,具有不同的範圍和值,那該怎麼辦?例如:
class Person {
private $name;
}
class Employee extends Person {
private $name;
}
我的猜測是,這個查詢將針對Employee::$name
跑:
SELECT e FROM Entities\Employee e WHERE e.name = 'test';
是否有可能的話,對查詢Person::$name
,但仍只返回Employee實例?喜歡的東西:
SELECT e FROM Entities\Employee e WHERE e.parent.name = 'test';
謝謝,確實是有道理的DQL這樣! – Benjamin
對於任何感興趣的人,這實際上記錄在[這裏](http://www.doctrine-project.org/docs/orm/2.1/en/reference/architecture.html):「類層次結構中的任何兩個實體類從彼此直接或間接繼承必須不具有相同名稱的映射屬性,也就是說,如果B從A繼承,則B必須不具有與從A繼承的已映射字段具有相同名稱的映射字段。 – Benjamin