如何更新在Doctrine(Symfony 4)中未自动生成$ id的实体?

问题描述 投票:0回答:1

我的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。

我在做什么错?

谢谢!

php symfony doctrine
1个回答
0
投票

@@ 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();

© www.soinside.com 2019 - 2024. All rights reserved.