使用doctrine扩展基类,我的基类有1:n关联

时间:2012-02-15 12:54:37

标签: inheritance orm symfony doctrine-orm

我正在努力弄清楚如何在Symfony中实现两个捆绑包之间的正确分离,并且我遇到了一个学说问题。

我有两个捆绑包,一个更通用的捆绑包(充满抽象类),称为' BaseProduct'然后是该捆绑包的实现(提供专门化该捆绑包功能的机会),称为“ClientProduct'。

我在&Product产品中有两个实体。捆绑的。

abstract class Product 
{
    // One product has many attributes
    private $attributes;

    private function getAttributes()
    {
        return $this->attributes;
    }
}

abstract class Attribute
{
    private $name;
    private $value;

    private function getName()
    {
        return $this->name;
    }

    private function getValue()
    {
        return $this->value;
    }
}

然后是具体的实现

class Product extends BaseProduct/Product
{

}

class Attribute extends BaseProduct/Attribute
{

}

我的问题

首先,我会使用' mappedSuperclass'要做到这一点,但是从阅读文档中你不能将集合设置为关于非具体类的关联(可以理解)。

我试图找到另一种方法来做到这一点。

这甚至可能吗?因为我的基类'与另一个基类有关系' (都是抽象的)。在这种情况下,我是否需要将关系转移到具体的'实现还是我可以将它们保持在这个级别(摘要)?我没有显示我的实体定义(' .yml'),但我打算将这些定义链接到具体实现(实体之间的关联也在其他具体实现之间),并保留没有实体定义的基类。

欢迎任何输入 - 这里的目标是创建一个可以专门化的解耦包。我确信这是一个非常普遍的目标,所以我有兴趣看看其他人是如何做到的(如果github上有任何捆绑这样做我有兴趣看到它们)。

1 个答案:

答案 0 :(得分:1)

我碰到了类似的东西,我使用的解决方法是提供一个具体的基类,它被简单地视为抽象(即:基类永远不会在任何地方实例化)。

如果你想强制执行基类的“抽象性”(所以其他开发人员不会愚蠢地尝试实例化它),你可以在它的构造函数中抛出异常。