PHP Doctrine使用discriminator map查询继承类



在本例中:

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。

最新更新