在构造函数中或通过UuidGenerator注释手动生成Uuid

时间:2018-10-29 12:30:09

标签: doctrine-orm doctrine uuid

我正在切换到Ramsey\Uuid,但不知道生成Uuid的预期方式是什么。

任一,如示例中所示,并带有注解:

/**
 * @var UuidInterface
 *
 * @ORM\Id
 * @ORM\Column(type="uuid", unique=true)
 * @ORM\GeneratedValue(strategy="CUSTOM")
 * @ORM\CustomIdGenerator(class="Ramsey\Uuid\Doctrine\UuidGenerator")
 */
private $id;


public function __construct() {
}

在构造函数中手动进行:

/**
 * @var UuidInterface
 *
 * @ORM\Id
 * @ORM\Column(type="uuid", unique=true)
 */
private $id;


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

在第二种情况下,我不了解在水合作用期间如何设置现有ID。我添加了一个公共二传手来进行测试,但是它没有被调用!以我的理解,从db加载时,会创建一个新对象,该对象执行构造函数并因此设置一个新的uuid。然后以某种方式,必须用db记录中的那个替换该uuid。我想念什么吗?

但是使用注释时id可以立即可用的最大优势消失了,因为生成仅在调用$em->persist(...)时发生。

还有一些变体,其中构造函数使用可选的uuid参数,如果不为null,则使用它。

0 个答案:

没有答案