2014-12-03 79 views
0

我有一個鏈接到配方對象的表單。 這個食譜對象有recipeCategories。symfony2 doctrine2不沖洗新實體

修改配方時,更新任何字段將工作很好,除了添加一個新的類別。

我的形式:

$builder 
    ->add('recipeCategories', 'entity',array(
      'multiple' => true, 
      'class' => 'AppBundle:FoodAnalytics\RecipeCategory', 
      'label' => 'Catégories', 
      'required' => false, 
      'attr'=>array(
       'data-toggle'=>"tooltip", 
       'data-placement'=>"top", 
       'title'=>"Indiquez les catégories dans lesquelles enregistrer la recette pour un recherche future plus facile", 
      ))) 

這裏是我所得到的:

exit(var_dump($request->request)); 

請求確實有recipeCategories

$recipeForm->handleRequest($request); 
    exit(var_dump($recipeForm->getData()->getRecipeCategories()->toArray())); 

形式確有recipeCategories

$formManager->getEntityManager()->persist($recipe); 
    exit(var_dump($recipe->getRecipeCategories()->toArray())); 

配方確實有類別

$formManager->getEntityManager()->flush($recipe); 
    exit(var_dump($formManager->getEntityManager()->getUnitOfWork()->getScheduledEntityInsertions())); 

有或無紅暈,我這裏得到空

我正在運行的symfony〜2.6.0和學說〜1.3作曲家更喜歡穩定的設置爲true 。

任何想法,我可以做些什麼,使其工作?其他字段保持正確。 我的實體有聯繫方式如下:

/** 
* @ORM\ManyToMany(targetEntity="\AppBundle\Entity\FoodAnalytics\Recipe", inversedBy="recipeCategories") 
* @ORM\JoinTable(
*  name="RecipeCategoryHasRecipe", 
*  joinColumns={@ORM\JoinColumn(name="recipeCategoryId", referencedColumnName="id", nullable=false)}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="recipeId", referencedColumnName="id", nullable=false)} 
*) 
*/ 
private $recipes; 

回答

0

我想通了!

我認爲在表單中定義by_reference => false僅適用於集合,但在這裏也是這種情況。我不得不添加下面的代碼:

/** 
* Add recipeCategory 
* 
* @param RecipeCategory $recipeCategory 
* 
* @return Recipe 
*/ 
public function addRecipeCategory(RecipeCategory $recipeCategory) 
{ 
    $recipeCategory->addRecipe($this); //makes the difference 
    $this->recipeCategories[] = $recipeCategory; 

    return $this; 
} 
+0

和問題在這裏相關https://github.com/symfony/symfony-docs/issues/1566 – 2014-12-05 14:26:49

0

也許你需要設置cascade參數在你們的關係定義:

/** 
* @ORM\ManyToMany(targetEntity="\AppBundle\Entity\FoodAnalytics\Recipe",  inversedBy="recipeCategories", cascade={"persist"}) 
* @ORM\JoinTable(
*  name="RecipeCategoryHasRecipe", 
*  joinColumns={@ORM\JoinColumn(name="recipeCategoryId", referencedColumnName="id", nullable=false)}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="recipeId", referencedColumnName="id", nullable=false)} 
*) 
*/ 
private $recipes; 
+0

實際上已經存在的類別,我使用實體字段類型來允許他們選擇。所以不幸的是,級聯並沒有改變它,連接表中沒有新的記錄。任何關於如何進一步調試的想法? – 2014-12-03 14:20:17

+0

@SébastienVassaux,您可以嘗試手動在表單字段中設置'property_path',但這只是猜測。 – 2014-12-03 14:22:44

+0

'property_path'=>'recipeCategories'不起作用,我是否需要將值更改爲其他值? – 2014-12-03 14:35:44