Я создал веб-приложение с помощью Symfony2, в котором у пользователя есть корреляция массива ManytoMany с сущностью Mission. Пользователь может загрузить entity $ product через форму, и одна из данных, передаваемых формой, - это миссия, связанная с пользователем.

Когда я пытаюсь загрузить данные, появляется ошибка:

ContextErrorException: Catchable Fatal Error: Object of class   
Doctrine\ORM\PersistentCollection could not be converted to string in     
C:\BitNami\wampstack-5.4.23- 
0\frameworks\symfony\vendor\doctrine\dbal\lib\Doctrine\DBAL\Statement.php line 103

Понятно, что Doctrine не знает, как сохранить ценность миссии.

Как мне с этим справиться?

Я не знал ни как объявить объект миссии в моей сущности продукта. Сейчас просто так:

/**
 * @var string
 *
 * @ORM\Column(name="mission", type="string", length=255)
 */
protected $mission;

ОБНОВИТЬ ---

Мой контроллер сейчас:

       $form = $this->createFormBuilder($product)
           ->add('name', 'text')
           ->add('mission', 'entity', array('required' => true, 'multiple' => false, 'class' => 'AcmeManagementBundle:Mission', 'query_builder' => function($repository) { return $repository->createQueryBuilder('c')->orderBy('c.id', 'ASC'); },))              
      //...
           ->add('save', 'submit')
           ->getForm(); 

ОБНОВИТЬ ---

Сейчас работает, но у меня проблема. Когда появляется форма для загрузки объекта $ product, появляется также -> add ('mission', 'entity' ... В этом поле я вижу все сохраненные миссии, а не только те, которые связаны с пользователем. Как я должен сменить контроллер? Я пытался сменить контроллер следующим образом:

       $product = new Product();
       $product->setMission($this->getUser()->getMission());
4
Gianni Alessandro 26 Янв 2014 в 19:05
Вставьте public function __toString() { return $this->mission; } в свой класс Entity
 – 
Lkopo
26 Янв 2014 в 19:11
Извините, я новичок в Symfony и php. Должен ли я добавить его в свой объект product.php?
 – 
Gianni Alessandro
26 Янв 2014 в 19:13
Да, в вашем объекте Product.php :)
 – 
Lkopo
26 Янв 2014 в 19:14
Но проблема не устранена: (В моем контроллере я установил миссию в сущности продукта с помощью $ product-> setMission ($ this-> getUser () -> getMission ()); Следует ли мне это изменить? Я пробовал кое-что, но я не удалось!
 – 
Gianni Alessandro
26 Янв 2014 в 19:41
1
Но вы должны использовать foreach в своем контроллере, где вы устанавливаете миссию.
 – 
Lkopo
26 Янв 2014 в 19:49

1 ответ

Лучший ответ

Для управления отношением ManyToMany между пользователем и миссией

В User.php:

/**
 * @var \Doctrine\Common\Collections\ArrayCollection
 * 
 * @ORM\ManyToMany(targetEntity="Your\SuperBundle\Entity\Mission", inversedBy="users", orphanRemoval=true)
 * @ORM\JoinTable(name="user_mission")
 */
private $missions;

В Mission.php:

/**
 * @var \Doctrine\Common\Collections\ArrayCollection
 *
 * @ORM\ManyToMany(targetEntity="Your\SuperBundle\Entity\User", mappedBy="missions", cascade={"all"}, orphanRemoval=true)
 */
private $users;

Затем для вашей формы:

http://symfony.com/doc/current/reference/forms/types /collection.html для управления сбором миссий в вашей форме пользователя.

Взгляните на "type" и "allow_add"

5
Vincent Barrault 27 Янв 2014 в 17:45
Сейчас работает, но у меня проблема. Когда появляется форма для загрузки объекта $ product, появляется также -> add ('mission', 'entity' ... В этом поле я вижу все сохраненные миссии, а не только те, которые связаны с пользователем. Как мне изменить свой контроллер? Я попробовал с помощью -> add ('mission', 'collection' .., но появляется ошибка.
 – 
Gianni Alessandro
28 Янв 2014 в 21:06
Вы хотите создать новую миссию или выбрать уже созданную?
 – 
Vincent Barrault
29 Янв 2014 в 14:13
У меня аналогичная проблема здесь, подошло ли оно к вашей проблеме? Спасибо, что помогли, если можете.
 – 
user4460771
28 Янв 2015 в 19:00