Я реализую this tutorial. Однако в моем случае Tag
объект имеет уникальный name
свойство:Вложение коллекции форм: проверьте, существует ли компания
/**
* @ORM\Entity()
*/
class Tag
{
/**
* @var string
* @ORM\Column(name="name", type="string", length=63, unique=true)
*/
private $name;
/**
* @ORM\ManyToMany(targetEntity="Task", cascade={"persist"})
* @ORM\JoinTable(name="tasks_tags")
*/
protected $tasks;
}
Как я могу проверить, если Tag
объект уже существует, в new
и edit
контроллеров, так что я могу решить, чтобы создать новый. Если Tag
существует, я могу добавить его к новой задаче.
public function newAction(Request $request)
{
$task = new Task();
$form = $this->createForm(TaskType::class, $task);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$tags = $form->get('tags')->getData();
$em = $this->getDoctrine()->getManager();
foreach ($tags as $tagName) {
$tag = $this->getDoctrine()->getRepository('AppBundle:Tag')->findOneBy(array('name' => $tagName));
if (!$tag) {
$newTag = new Tag();
$newTag->setName($tagName);
$em->persist($newTag);
}
}
$em->persist($task);
$em->flush();
return $this->redirectToRoute('tasks_list');
}
}
Я получил эту ошибку после того, как представить:
Catchable Fatal Error: Object of class
AppBundle\Entity\Tag
could not be converted to string
Я думаю, что это потому, что Tag
сущность сохраняется до того Task
форма была отправлена.
Как я могу справиться с этой частью?
да точно и в строке '$ newTag-> setName ($ tagName);' $ tagName пытается искать '__toString()' для преобразования объекта в строку , который не существует и, следовательно, ... хороший улов – sakhunzai