我在Symfony2项目中使用Doctrine2作为ORM。我有article
和tag
个实体类。他们之间有多对多的关系。一篇文章可能有很多标签,反之亦然。有一个联接表article_tags
,它只有2列article_id
和tag_id
,并由doctrine生成。一切正常,但是,当添加带有某些标签的新文章时,新的和预先存在的标签都会插入到tag
表中,其中我只想存储唯一标记; article_tags
应该只关联它们。
我的文章架构:
manyToMany:
tags:
targetEntity: Tag
cascade: ["persist"]
joinTable:
name: article_tag
joinColumns:
article_id:
referencedColumnName: id
inverseJoinColumns:
tag_id:
referencedColumnName: id
向tag
添加唯一属性并忽略重复项是不合理的,因为应该存在关系。我尝试添加逻辑,检查标记是否存在获取标记数据并将其添加到文章:
$article->addTag($existingTag);
它出现以下错误:
捕获致命错误:参数1传递给 Seferov \ ArticleBundle \ Entity \ Article :: addTag()必须是。的实例 Seferov \ ArticleBundle \ Entity \ Tag,null给定,调用 /var/www/seferov.local/src/Seferov/ArticleBundle/Repository/TagRepository.php 在第34行并在中定义 /var/www/seferov.local/src/Seferov/ArticleBundle/Entity/Article.php 第393行
答案 0 :(得分:0)
您基本上需要检查标签是否存在。如果确实如此,那就使用它。如果没有,那么创建一个。
public function loadOrg($orgId,$autoCreate = false)
{
$org = $this->getEntityManager()->find('ZaysoCoreBundle:Org',$orgId);
if ($org) return $org;
if (!$autoCreate) return null;
if (!$orgId) return null;
$org = new Org();
$org->setId($orgId);
$this->getEntityManager()->persist($org);
return $org;
}
确保您的标记列唯一并捕获异常。另一个请求可能在find和persist之间插入相同的标记。