1

我有一个在 __construct 函数上生成的具有自定义 ID(即 UUID)的实体。

namespace AppBundle\Entity;
use Rhumsaa\Uuid\Uuid;
use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Entity
*/
class Person
{
    /**
    * @ORM\Id
    * @ORM\Column(type="string")
    */
    private $id;

    /**
    * @ORM\Column(type="string")
    */
    private $name;

    public function __construct()
    {
        $this->id = Uuid::uuid4()->toString();
    }

该实体用于奏鸣曲以及项目的其他部分。在持久化和刷新它之前,我需要这个实体有 id,所以我不能使用自动增量。

所以,问题是奏鸣曲不要让我创建实体,因为它需要创建选项并在执行时进行编辑,因为该实体已经有一个 id,但这个实体目前不存在,所以它失败了。

问题不在于生成 UUID 的库,'id' 的任何值都失败。

有谁知道如何解决它?解决问题的另一种类似方法?

4

1 回答 1

0

You shouldn't set your id in the constructor, but rather use the prePersist Doctrine event to alter your entity before persisting it for the first time.

You may use annotations to do so, see the Doctrine Documentation on prePersist.

The issue with setting the id in the constructor is that you may override it when you're retrieving it from the database, in which case it will be incorrect.

于 2015-01-27T08:09:49.117 回答