我有以下类的层次结构:
/**
* @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;
}
在此域模型中,层次结构中只有两个可能的级别,因此区别为RootCategory
或SubCategory
。
我觉得必须指定一个明确的鉴别器列是多余的,我们可以使用一个简单的规则作为鉴别器:
parentId
null ,那么这是RootCategory
parentId
不为空,那么这是SubCategory
是否可以使用 Doctrine 2 ,使用列的NULL状态作为鉴别器?
答案 0 :(得分:2)
不,这是不可能的。
如果查看source code of Doctrine 2,您会看到他将DiscriminatorMap
转换为数组,该数组不能包含NULL键,只能包含字符串或整数。
答案 1 :(得分:0)
您可以在DQL中使用以下内容
$qb->where('{...} IS NULL');