Doctrine 2 postPersist然后保存/更新实体

时间:2014-09-10 00:04:26

标签: php doctrine-orm doctrine

我正在创建一个我希望插入到我的一些Doctrine实体类中的特征。该特性基本上允许使用基于实体id(主键)的Hashids PHP库创建slug属性。

我已经包含了所需的属性和& getter / setter以及特征上的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;
    }
}

1 个答案:

答案 0 :(得分:0)

经过一些试验和错误后,我发现了如何坚持更新/更改。当我使用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;
    }
}