我有一个在函数__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 时,您可能会覆盖它,在这种情况下,它将不正确。