2014-12-18 2 views
1

У меня есть два объекта, связанных отношением «многие ко многим», и формирователь форм с типом поля сущности, но все это не сохраняется в базе данных. Вот ссылки на мои файлы. Может кто-нибудь мне помочь. Где моя ошибка?Связанные объекты не сохраняются в базе данных Symfony2

Ссылки:

tag entity

post entity

contorller action

form_builder

+0

Что делает '$ this-> save ($ post);' ссылается на действие вашего контроллера? В этом контроллере нет метода save(). Или вы просто забыли вставить его, мы не можем его увидеть. – VaN

+0

@VaN, этот метод просто вызывает диспетчер сущности persit $ post и очищает его до db. – nowiko

+2

Я уверен, что вам не нужно использовать этот цикл foreach() в вашем контроллере. Тип формы и обработчик запросов должны выполнять эту работу за вас. Вы должны полностью прочитать этот учебник по кулинарной книге Symfony: http://symfony.com/doc/current/cookbook/form/form_collections.html Он делает от А до Я то, что вы пытаетесь достичь. Собственно, что в настоящее время сохраняется в вашей базе данных? ничего ? сообщение только? – VaN

ответ

1

Попробуйте установить 'by_reference' ложь в форму:

->add('tags', 'entity', array(
        'label' => 'Tags', 
        'class' => 'GeekhubMainBundle:Tag', 
        'property' => 'tagName', 
        'empty_value' => 'Choose a tag', 
        'multiple' => true, 
        'expanded' => false, 
        'by_reference' => false, // Makes sure that tags 
              // are actually added to your post 
        'query_builder' => function (TagRepository $repository) { 
          return $repository->findEnabledTags(); 
         } 
       ) 

Вот пример того, что вы пытаетесь достичь в Symfony Cookbook: http://symfony.com/doc/current/cookbook/form/form_collections.html

И некоторая информация о by_reference: http://symfony.com/doc/current/reference/forms/types/collection.html#by-reference

0

Измените объекты, как это:

Tag объекта:

/** 
* @param Post $post 
* @return $this 
*/ 
public function addPost(Post $post) 
{ 
    $post->addTag($this); 
    $this->posts->add($post); 

    return $this; 
} 

сообщение лицо:

/** 
* @param Tag $tag 
* @return $this 
*/ 
public function addTag(Tag $tag) 
{ 
    $tag->addPost($this); 
    $this->tags->add($tag); 

    return $this; 
}