我正在实施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
我认为这是因为提交Task
形式之前Tag
实体依然存在。
我该如何处理这部分?
yes和$'newTag-> setName($ tagName);'$ tagName正在尝试查找'__toString()'将对象转换为字符串的行中显示标记为{{tag.name} ,这并不存在,因此......良好的捕获 – sakhunzai