Я создал веб-приложение с помощью 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());
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"
Похожие вопросы
Связанные вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.
public function __toString() { return $this->mission; }
в свой класс Entity