Symfony2:Sonata实体中的自定义标识符


Symfony2: Custom identifier in Sonata entities

我有一个在函数__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"的任何值都会失败。

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

不应在构造函数中设置 id,而应在首次持久化实体之前使用 prePersist Doctrine 事件更改实体。

您可以使用注释来执行此操作,请参阅prePersist上的原则文档。

在构造函数中设置 id 的问题在于,当您从数据库中检索 id 时,您可能会覆盖它,在这种情况下,它将不正确。