【发布时间】:2014-02-11 20:49:12
【问题描述】:
我正在使用embed Symfony form 直接在文章编辑器中添加和删除Tag 实体。 Article 是关联上的owning side:
class Article
{
/**
* @ManyToMany(targetEntity="Tags", inversedBy="articles", cascade={"persist"})
*/
private $tags;
public function addTag(Tag $tags)
{
if (!$this->tags->contains($tags)) // It is always true.
$this->tags[] = $tags;
}
}
条件在这里没有帮助,因为它总是正确的,如果不是,则根本不会有新的标签被持久化到数据库中。这是Tag 实体:
class Tag
{
/**
* @Column(unique=true)
*/
private $name
/**
* @ManyToMany(targetEntity="Articles", mappedBy="tags")
*/
private $articles;
public function addArticle(Article $articles)
{
$this->articles[] = $articles;
}
}
我已将$name 设置为唯一,因为我希望每次在表单中输入相同的名称时都使用相同的标签。但这不起作用,我得到了例外:
违反完整性约束:1062 重复条目
我需要更改什么才能使用article_tag,这是提交标签名称时的默认连接表,它已经在Tag 表中?
【问题讨论】:
-
看看@UniqueEntity 来验证唯一性 - symfony.com/doc/current/reference/constraints/UniqueEntity.html
-
这对于获得“不错”的错误页面很有用,但不能解决问题
标签: php symfony doctrine-orm