在本例中:
http://www.doctrine-project.org/docs/orm/2.0/en/reference/dql-doctrine-query-language.html文档
我们看到
SELECT e FROM EntitiesEmployee e WHERE e.name = 'test'
执行如下查询:
SELECT p0_.id AS id0, p0_.name AS name1, p0_.department AS department2,
p0_.discr AS discr3 FROM Person p0_ WHERE (p0_.name = ?) AND p0_.discr IN ('employee')
是否有一种方法来查询记录仅与鉴别符"人"?
:
SELECT e FROM EntitiesPerson e WHERE e.name = 'test'
返回所有记录。
任何想法?
默认情况下,继承映射实体中的父实体似乎不使用Discriminator规则。
我通过创建一个基类/实体来解决这个问题。
/**
* @Entity
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
*/
class PersonBase
{
/**
* @Id @Column(type="integer")
* @GeneratedValue
*/
protected $id;
/**
* @Column(type="string", length=50)
*/
protected $name;
// ...
}
/**
* @Entity
*/
class Person extends PersonBase
{
}
/**
* @Entity
*/
class Employee extends PersonBase
{
/**
* @Column(type="string", length=50)
*/
private $department;
// ...
}
现在Person将使用鉴别符规则,您永远不需要直接引用PersonBase。