【发布时间】:2014-08-17 20:15:51
【问题描述】:
我的 Symfony 应用程序中有一个 article 实体和一个 tag 实体。我有一个嵌套表单来编辑和标记文章:
当我从这个表单添加一个新标签时,Doctrine 会尝试将一个新标签插入到Tag 表中,而不是在连接表中插入一个新关系,即article_tag,这会导致违反唯一名称约束。为了纠正这个问题,我创建了一个data transformer,它获取并返回任何现有的Tag 对象:
public function reverseTransform($name)
{
//…
return $this->om
->getRepository('AcmeBundle:Tag')
->findOneByName($name)
;
}
不幸的是,应用程序将其转换回字符串(DBAL/Statement.php 第 103 行),因此 Doctrine 仍然启动相同的插入查询。我怎样才能防止这种情况?我应该在哪里查找任何错误?
请检查 ArticleType.php 和 TagType.php 在我关于 reusing existing entities 表单的 Type 文件 和两个实体的问题中我对协会的avoiding duplicate entries with Doctrine 的问题!我需要保留新标签(它有效)并为新关系选择已经持久的标签。很长一段时间以来,我一直在努力完成这项任务。
【问题讨论】:
-
请发布您的表单类型文件以及您与两个实体的关联。您是否还需要保留不存在的标签,还是只需要选择已经保留的标签?
标签: php symfony doctrine-orm