symfony2 doctrine2 не сбрасывает новую сущность

У меня есть форма, связанная с объектом рецепта.
Этот объект рецепта имеет recipeCategories.

При изменении рецепта обновление любого поля будет работать отлично, за исключением добавления новой категории.

Моя форма:

$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()));

Форма имеет рецептКатегории

    $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 и Doctrine ~ 1.3, а Composer Предпочтение-Стабильно установлено в 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

Решение

Вероятно, вам нужно установить 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

Другие решения

Я понял!

Я думал, что определение 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

По вопросам рекламы [email protected]