2012-08-24 150 views
0

我目前工作的一個模型,它並不完全滿足我呢。我有一組與單繼承的對象,其引用另一個對象:Doctrine2 + Symfony2的默認繼承

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的& Doctrine2不允許我從我的實體內查詢的類別對象(文件,因爲我使用的MongoDB)的架構。

class ProductTypeOne 
{ 

    private $category_id = 5; 

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

打開任何輸入,提前感謝!

+1

注入已知類別的子類的構造函數。 – moonwave99

+0

與構造嘗試過,但並不能完全解決問題。 這就要求我把它傳遞給構造函數,但我不希望每次我用的是子​​類的控制器時間搶那些相關的項目.. 我一直在閱讀與DI/Symfony的服務架構A和將給它稍後一槍。 – weyandch

回答

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,並注入類在其方法中。