我有以下代码。 Part的代码列需要一个唯一值,因此当我remove()
时会抛出一个错误,然后persist()
会产生一个具有相同代码值的行。但是,应该首先删除该行,因此只有一个值。我必须在这些命令之间运行flush()
吗?
if ($existingPart) { # we found one
if ($existingPart->getPrice() != $part->getPrice()) { # price changed
$em->remove($existingPart); #soft-delete the old one
$em->persist($part); # persist the new part
$countUpdates++; # get number of updated entities
}
} else {
$em->persist($part); # no existing part with same code, just add new part
$count++; # get number of new commits
}
}
$em->flush();
答案 0 :(得分:1)
阿。我发现了原因:我使用的是softdeletable。我需要做的是从列定义中删除唯一值标志,而不是在类注释中插入以下内容:
@UniqueEntity(fields={"deletedAt","code"})
这将检查deletedAt
和code
的组合是否唯一而不仅仅是字段。