在prePersist LifecycleCallback中使用Doctrine UUID

时间:2015-03-12 10:36:11

标签: symfony doctrine-orm

有没有办法在实体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 个答案:

答案 0 :(得分:1)

我认为你有两个选择:

1)您可以通过this library(或其他库)手动创建UUID。然后你可以在prePersist活动中访问它们。

2)或者您使用postPersist处理程序,但这将创建一个INSERT语句和一个UPDATE语句。

使用MySQL触发器是一个坏主意,因为没有人可以控制它们。它就像魔术,它发生了,但没有人知道如何。更新它们是一件痛苦的事。