2 回答
TA贡献1831条经验 获得超10个赞
我建议您使用Doctrine 生命周期回调preUpdate中的事件。在更新帖子时,您告诉教义检查是否有标签更改(在这种情况下为 NULL),如果是,则查询标签检查是否有任何帖子仍在使用它。
简而言之,您需要:
在您的课程之前添加 @ORM\HasLifecycleCallbacks 以启用生命周期。
在 Post 类中添加 preUpdate 功能:
/**
* @ORM\PreUpdate
* @param PreUpdateEventArgs $event
*/
public function clearChangeSet(PreUpdateEventArgs $event)
{
if ($event->hasChangedField('field_you_want_to_check')
) {
$em = $event->getEntityManager();
// Now use the entityManager to query the tag and check.
}
}
通过执行此原则将为您进行检查,在逻辑代码中您只需要执行取消链接,无需关心删除标签。
TA贡献1824条经验 获得超6个赞
解决方案:
/**
* @ORM\PostUpdate()
*/
public function postUpdate(LifecycleEventArgs $args)
{
/** @var PersistentCollection $tags */
$tags = $args->getEntity()->getTags();
if ($tags->isDirty() && ($deleted = $tags->getDeleteDiff())) {
$em = $args->getEntityManager();
foreach ($deleted as $tag) {
if ($tag->getPosts()->count() === 1) {
$em->remove($tag);
$em->flush($tag);
}
}
}
}
- 2 回答
- 0 关注
- 141 浏览
添加回答
举报