我的Symfony 4实体具有非自动增量ID:
/**
* @ORM\Entity(repositoryClass="App\Repository\PropertyRepository")
*/
class Property
{
/**
* @ORM\Id()
* @ORM\Column(type="integer")
*/
protected $id;
.....
public function setId($id): self
{
$this->id = $id;
return $this;
}
我使用setId()
方法自行设置。
$prop = new Property();
$prop->setId(1);
$prop->setName('baobao');
$this->em->persist($dbProperty);
$this->em->flush();
我在INSERT上没有问题,但是如果失败两次我运行相同的代码两次:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'PRIMARY'
即使我期望更新,第二个查询也是一个INSERT。
我在做什么错?
谢谢!
@@ Florian Hermann评论指出了正确的方向。如此处所示https://symfony.com/doc/current/doctrine.html#updating-an-object,需要先加载对象:
$propertyRepository = $this->em->getRepository(Property::class);
$dbProperty = $propertyRepository->find($id);
if(empty($dbProperty)) {
$dbProperty = new Property();
} else {
$dbProperty->setId($id);
}
$dbProperty->set....
$dbProperty->set....
$dbProperty->set...
$this->em->persist($dbProperty);
$this->em->flush();