原则2后持久化,然后保存/更新实体


Doctrine 2 postPersist then save/update entity

我正在创建一个特性,我想将它插入到我的一些条令实体类中。该特性基本上允许使用基于实体id(主键)的Hashids PHP库创建slug属性。

我已经包括了所需的属性&getters/ssetters以及特性的postPersist()方法,但我现在想知道如何在postPersist()方法中重新保存/更新/持久化更改?

任何帮助或指导都会很棒。

SlugTrait

trait Slug
{
    /**
     * @ORM'Column(type="string")
     */
    private $slug;
    /**
     * @ORM'PostPersist
     */
    public function postPersist()
    {
        $this->slug = (new SlugCreator())->encode($this->id);
        // Save/persist this newly created slug...?
    }
    public function getSlug()
    {
        return $this->slug;
    }
    public function setSlug($slug)
    {
        $this->slug = $slug;
    }
}

经过一番尝试和错误之后,我发现了如何保持更新/更改。当我使用Laravel时,我刚刚从IoC容器中解析了实体管理器,然后用它来保持更新的段塞字段,就像这样(你也可以手动更新实体管理器):

trait Slug
{
    /**
     * @ORM'Column(type="string")
     */
    protected $slug;
    /**
     * @ORM'PostPersist
     */
    public function postPersist()
    {
        $this->slug = (new SlugCreator())->encode($this->id);
        // Save/persist this newly created slug.
        // Note: We must add the top level class annotation
        // '@ORM'HasLifecycleCallbacks()' to any Entity that
        // uses this trait.
        $entityManager = App::make('Doctrine'ORM'EntityManagerInterface'); // or new up the em "new EntityManager(...);
        $entityManager->persist($this);
        $entityManager->flush();
    }
    public function getSlug()
    {
        return $this->slug;
    }
    public function setSlug($slug)
    {
        $this->slug = $slug;
    }
}