在 prePersist LifecycleCallback 中使用 Doctrine UUID
Use Doctrine UUID in prePersist LifecycleCallback
有没有办法在实体LifecycleCallback中使用之前生成的UUID?
/**
* @ORM\Table("user")
* @ORM\HasLifecycleCallbacks()
*/
class User
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="guid")
* @ORM\GeneratedValue(strategy="UUID")
*/
private $id;
/**
* @ORM\Column(name="slug", type="string", length=36)
*/
private $slug;
[.. getId() / setSlug() / getSlug() ..]
/**
* @ORM\PrePersist
*/
public function onPrePersist()
{
$this->setSlug($this->getId());
}
}
我的意图是使用 UUID 作为用户创建的默认 slug,直到我得到例如用户名来更新 slug。可以mysql触发解决方案吗?
我想你有两个选择:
1) 您可以通过this library(或其他库)手动创建一个UUID。然后您可以在 prePersist 事件中访问它们。
2) 或者您使用 postPersist 处理程序,但这将创建一个 INSERT 语句和一个 UPDATE 语句。
使用 MySQL 触发器不是一个好主意,因为没有人可以控制它们。这就像魔术一样,它发生了,但没有人知道如何发生。更新它们很痛苦。
有没有办法在实体LifecycleCallback中使用之前生成的UUID?
/**
* @ORM\Table("user")
* @ORM\HasLifecycleCallbacks()
*/
class User
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="guid")
* @ORM\GeneratedValue(strategy="UUID")
*/
private $id;
/**
* @ORM\Column(name="slug", type="string", length=36)
*/
private $slug;
[.. getId() / setSlug() / getSlug() ..]
/**
* @ORM\PrePersist
*/
public function onPrePersist()
{
$this->setSlug($this->getId());
}
}
我的意图是使用 UUID 作为用户创建的默认 slug,直到我得到例如用户名来更新 slug。可以mysql触发解决方案吗?
我想你有两个选择:
1) 您可以通过this library(或其他库)手动创建一个UUID。然后您可以在 prePersist 事件中访问它们。
2) 或者您使用 postPersist 处理程序,但这将创建一个 INSERT 语句和一个 UPDATE 语句。
使用 MySQL 触发器不是一个好主意,因为没有人可以控制它们。这就像魔术一样,它发生了,但没有人知道如何发生。更新它们很痛苦。