2012-01-05 51 views
5

我有2個實體Product和Product_Types。Symfony2 Collection Form不填充連接列

這是它們之間的關係:

manyToOne: 
    product: 
     targetEntity: Product 
     joinColumn: 
     name: product_id 
     referencedColumnName: id 

當我添加一個新的產品,我希望能夠給類型添加到該產品具有相同的形式。

  ->add('productColor', 'collection', array("type" => new ProductColorType(), "allow_add" => true, 'prototype' => true)) 

這就是我如何嵌入窗體。

'data_class'是爲ProductType和ProductTypesType設置的,當我添加一個帶有類型的新產品時,一切都很好,除了一件事情,symfony/doctrine沒有設置'product_id'列,所以會有在我的產品和它的類型之間沒有關係。

+0

這很有趣,在我問這個問題之前,我一直在尋找一個解決方案,然後我找到了解決方案,我在產品堅持之前就爲這些類型設置了產品。它解決了這個問題,但我仍然認爲不應該這樣做。 – Tom 2012-01-05 19:57:08

回答

0

嘗試在實體管理器刷新之前也堅持productColors。

5

您需要手動將您的實體交叉鏈接。 Symfony和Doctrine都不會爲你做這件事。您可以外接內,例如做這個...()方法:

public function getProductColors() 
{ 
    return $this->productColors; 
} 

public function addProductColor(ProductColor $color) 
{ 
    $this->productColors->add($color); 
    $color->setProduct($this); 
} 

然後三個要求必須以滿足這個工作:

  • 你正在運行的Symfony主
  • 您正在運行原則2.1.7/2.2.3
  • 你的 「收藏」 欄的 「by_reference」 選項設置爲false

如果你這樣做,你應該沒問題。

+0

在addProductColor()中調用setProduct()會起作用。但是,根據文檔,將by_reference設置爲false應該調用setProductColors(),但似乎並非如此。任何想法? – 2013-02-27 15:58:05

+0

取決於添加/刪除方法是否可用。如果他們是,他們被用來代替setter。 – 2013-04-17 23:14:52