2015-11-05 3 views
0

Добрый вечер,Symfony2 ManyToMany отношение не связывает 2 лица - Doctrine2 пытается сохраняться обратные Entity

я разработал мое приложение таким образом, что пользователь может подписаться на несколько событий и событий может иметь несколько подписчиков типа пользователя.

Я решил создать отношения ManyToMany между сущностью Event и сущностью User для достижения этого.

Точнее, объект Event имеет отношение.

class Event implements EventInterface 
{ 
/** 
* @ORM\ManyToMany(targetEntity="FS\UserBundle\Entity\User", inversedBy="events") 
*/ 
private $subscribers; 
public function __construct() 
{ 
    $this->subscribers = new \Doctrine\Common\Collections\ArrayCollection(); 
} 

/* 
** FYI my app logic is to persist the event so i addEvent($this) to $subscriber 
*/ 

public function addSubscriber(\FS\UserBundle\Entity\User $subscriber) 
{ 
    $this->subscribers[] = $subscriber; 

    $subscriber->addEvent($this); 

    return $this; 
} 

Мое лицо пользователя является обратной стороной отношения.

class User implements UserInterface 
{ 
/** 
* @ORM\ManyToMany(targetEntity="FS\EventBundle\Entity\Event", mappedBy="subscribers") 
*/ 
private $events; 

public function __construct() 
{ 
    $this->events = new \Doctrine\Common\Collections\ArrayCollection(); 
} 

public function addEvent(\FS\EventBundle\Entity\Event $event) 
{ 
    $this->events[] = $event; 

    return $this; 
} 
... 

Я добавляю подписчик ($ user) к новому событию. Затем я отправить событие с данными моего EventForm к этому контроллеру:

private function processForm(EventInterface $event, array $parameters, $method = "PUT") 
{ 
    $form = $this->formFactory->create(new EventType(), $event, array('method' => $method)); 
    $form->submit($parameters, 'PATCH' !== $method); 

    $event = $form->getData(); 

    $validator = $this->container->get('validator'); 
    $listErrors = $validator->validate($event); 

    if ($form->isValid() && count($listErrors) === 0) { 
     $event->setAge(); 

     $this->om->persist($event); 
     $this->om->flush($event); 
    } 

Когда я упорствуем событие, пользователь не отражает каких-либо изменений, и я получаю следующее исключение: Новый объект был найден через отношения 'FS \ UserBundle \ Entity \ User # events', который не был настроен на каскадное сохранение операций для объекта [пользователя].

Почему Doctrine2 попытается повторно использовать пользователя в этом случае?

ответ

0

Попробуйте с этим:

class Event implements EventInterface 
{ 
    /** 
    * @ORM\ManyToMany(targetEntity="FS\UserBundle\Entity\User", inversedBy="events", cascade={"persist"}) 
    */ 
    private $subscribers; 
+0

Я пытался добавить каскад = { «упорствовать»}, но ошибка такая же, у тебя есть другая идея? – Louis

+0

http://docs.doctrine-project.org/en/latest/reference/working-with-associations.html, вам нужно будет добавить некоторые методы, я буду обновлять свой ответ как можно скорее – smarber

 Смежные вопросы

  • Нет связанных вопросов^_^