2014-12-03 3 views
0

양식이 래서 피 개체에 링크되어 있습니다. 이 래서 피 객체에는 recipeCategories가 있습니다.symfony2 doctrine2 새 엔터티가 플러시되지 않음

레시피를 수정할 때 필드를 업데이트하면 새로운 카테고리를 추가하는 것 외에는 큰 효과가 있습니다.

내 양식 :

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

요청 양식은 recipeCategories

$formManager->getEntityManager()->persist($recipe); 
    exit(var_dump($recipe->getRecipeCategories()->toArray())); 
을 수행하는 recipeCategories

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

가 않습니다

여기
$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", 
      ))) 

내가 무엇을 얻을 true로

제조법은, 내가 여기 널

내가 심포니를 실행하고 얻을 또는 플러시하지 않고 카테고리

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

을 가지고 ~ 작곡가와 2.6.0과 교리 ~ 1.3 선호 안정 세트 .

내가 작동하게 만들 수있는 아이디어는 무엇입니까? 다른 필드는 올바르게 유지됩니다.

/** 
* @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에서 확인할 수 있습니다. –

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

범주가 실제로 이미 존재하므로 해당 선택을 허용하기 위해 엔터티 필드 형식을 사용하고 있습니다. 그래서 불행하게도 계단식으로는 변경하지 않았고 조인 테이블에 새로운 레코드가 없습니다. 이걸 어떻게 더 디버깅 할 수 있을지에 대한 생각은? –

+0

@ SébastienVassaux에서 양식 필드에'property_path'를 수동으로 설정할 수도 있습니다.하지만 그냥 추측하는 것입니다. –

+0

'property_path'=> 'recipeCategories'가 작동하지 않습니다. 값을 다른 것으로 변경해야합니까? –