我正在创建一个我希望插入到我的一些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;
}
}
答案 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;
}
}