单表继承 - 鉴别器映射

时间:2012-01-05 14:14:27

标签: symfony doctrine-orm

我需要在课堂上为DiscriminatorMap制作一个公式,因为我有很多课程,而且我不能区分每一个。

歧视可以是班级的名称。

有可能吗? (带注释,xml或其他)

/**
* @ORM\Entity
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({"MidUpperArmCircumference" = MidUpperArmCircumference", "KneeHeight" = "KneeHeight"})
*/

感谢。

3 个答案:

答案 0 :(得分:6)

答案 1 :(得分:2)

我只是遗漏了DiscriminatorMap注释,而且Doctrine自动使用chield的类名作为鉴别器:

/**
 * @ORM\Entity()
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="type", type="string")
 */
abstract class AbstractContent
{
    /**
     * @var integer
     *
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
}

/**
 * @ORM\Entity()
 */
class Page extends AbstractContent
{
}

现在,当我创建新的Page()条款时,AbstractContentPage会向AbstractContent创建一个FK,并设置AbstractContent的{ {1}}属性为type

这是完美的,因为它允许您生成尽可能多的子类,即使在其他Bundles中没有您的超类(在我的情况下page)需要了解它们。

但请记住,到目前为止,这还没有正式记录。使用Doctrine ORM 2.3进行测试。

答案 2 :(得分:0)

这是一个老问题。 Doctrine很好地支持单表继承。 以下示例来自official docs

<tr><td colspan="2"><textarea style="width: 100%;" /></td> </tr>

详细了解here