Doctrine2 + Symfony2具有默认继承

时间:2012-08-24 08:55:54

标签: inheritance symfony reference doctrine-orm

我目前正在制作一个模型,但还不太令我满意。我得到了一组具有单继承的对象,它引用了另一个对象:

class Category
{
    /** @MongoDB\Id(strategy="auto") */
    protected $id;

    /** @MongoDB\Int */
    protected $categoryId;

    /** @MongoDB\String */
    protected $title;
}

class ProductTypeOne extends BaseProductType
{
    /** @MongoDB\Id(strategy="auto") */
    protected $id;

    /** @MongoDb\ReferenceOne(targetDocument="Category") */
    private $category;     

}

我目前面临的问题是,当我创建一个对象ProductTypeOne时,我实际上知道它将引用哪个类别 - 它对于此ProductType始终是相同的。

我可以设置一个修复参数,例如category_id = 1 - 但是Sf2和Sf2中的体系结构。 Doctrine2不允许我从我的实体中查询类别对象(文档,因为我正在使用MongoDB)。

class ProductTypeOne 
{

    private $category_id = 5;

    public method getCategory()
    {   
       /** how to query the CategoryObject with ID=5? */
    }
}

打开任何输入,提前谢谢!

1 个答案:

答案 0 :(得分:0)

然后试试这个:

class ProductTypeOne extends BaseProductType
{

    static $DEFAULT_CATEGORY = 5;

    // rest of the code

}

在插入时[在控制器中],您可以设置类别:

$product = new ProductTypeOne;

// do whatever you need to fill the instance

$product -> setCategory(
    $this -> getDoctrine() -> getRepository('Category') -> findOneById( ProductTypeOne::$DEFAULT_CATEGORY )
);

// persist $product, beer time

另一种方法是编写自定义ProductTypeOneRepository,并在其方法中注入类别。