假设我有两个实体,News
并且Tag
. 它们具有一对多的关系。我也对标签表有一个独特的约束('news_id', 'name')
。
现在我现在的状态是:
tags
---------------------
id | news_id | tag
---------------------
1 | 1 | world
2 | 1 | event
如果我做:
$em->remove($tag2);
$em->persist(new Tag($tag2->getNews(), 'event'));
我明白Integrity constraint violation: 1062 Duplicate entry
了,因为教义试图在删除旧实体之前插入。当我更新/删除时也会发生同样的情况。是否可以告诉教义首先删除旧实体?还是有更好的解决方案?
另一个例子:
一个简单的表:
tags
---------------------
id | tag
---------------------
1 | world
2 | event
为tag
列设置了唯一约束。
现在我这样做:
$tags = $em->getRepository('Tag')->findAll();
$tempName = $tags[0]->getName();
$tags[0]->setName($tags[1]->getName());
$tags[1]->setName($tempName);
并得到相同的错误,因为它尝试使用“事件”值更新第一个标签,并且已经存在重复。
PS:我知道我可以打电话flush
两次,但这是个坏主意。