Doctrine 2继承映射:可以将NULL用作鉴别器吗?

时间:2011-11-23 10:28:09

标签: php inheritance orm doctrine-orm

我有以下类的层次结构:

/**
 * @Entity
 * @InheritanceType("SINGLE_TABLE")
 * @DiscriminatorColumn(name="discr", type="string")
 * @DiscriminatorMap({"root" = "RootCategory", "sub" = "SubCategory"})
 */
class Category
{
    /**
     * @Id @Column(type="integer") @GeneratedValue
     */
    protected $id;
}

/**
 * @Entity
 */
class RootCategory extends Category
{
}

/**
 * @Entity
 */
class SubCategory extends Category
{

    /**
     * @ManyToOne(targetEntity="RootCategory")
     * @JoinColumn(name="parentId", referencedColumnName="id")
     */
    protected $parent;
}

在此域模型中,层次结构中只有两个可能的级别,因此区别为RootCategorySubCategory

我觉得必须指定一个明确的鉴别器列是多余的,我们可以使用一个简单的规则作为鉴别器:

  • 如果parentId null ,那么这是RootCategory
  • 如果parentId 不为空,那么这是SubCategory

是否可以使用 Doctrine 2 ,使用列的NULL状态作为鉴别器?

2 个答案:

答案 0 :(得分:2)

不,这是不可能的。

如果查看source code of Doctrine 2,您会看到他将DiscriminatorMap转换为数组,该数组不能包含NULL键,只能包含字符串或整数。

答案 1 :(得分:0)

您可以在DQL中使用以下内容

$qb->where('{...} IS NULL');