我有一个在__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,所以我不能使用自动增量。
所以,问题是sonata不让我创建实体,因为它将create选项作为执行编辑,因为该实体已经有一个id,但此实体此时不存在,所以它失败了。 / p>
问题不在于生成UUID的库,'id'的任何值都失败。
任何人都知道如何解决它?另一种解决问题的类似方法是什么?
答案 0 :(得分:0)
你不应该在构造函数中设置你的id,而是在第一次持久化之前使用prePersist
Doctrine事件来改变你的实体。
您可以使用注释来执行此操作,请参阅the Doctrine Documentation on prePersist。
在构造函数中设置id的问题是,当您从数据库中检索它时,可以覆盖它,在这种情况下,它将是不正确的。