Доктрина 2: наследование: можно ли использовать NULL в качестве дискриминатора? - PullRequest
2 голосов
/ 23 ноября 2011

У меня есть следующая иерархия классов:

/**
 * @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 равно ноль , то это RootCategory
  • Если parentId равно не равно нулю , то это SubCategory

Можно ли с помощью Doctrine 2 использовать в качестве дискриминатора статус NULL для столбца?

Ответы [ 2 ]

2 голосов
/ 03 декабря 2011

Нет, это невозможно.

Если вы посмотрите на исходный код Doctrine 2 , вы увидите, что он преобразует DiscriminatorMap в массив, который не может иметь ключ NULL,только строка или целое число.

0 голосов
/ 25 ноября 2011

Можете ли вы использовать следующее в DQL

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

...