class DistCache
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\PlaceInfo")
* @ORM\JoinColumn(nullable=false)
*/
private $placeOne;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\PlaceInfo")
* @ORM\JoinColumn(nullable=false)
*/
private $placeTwo;
该表有两个成员,都与 PlaceInfo
类相关。
并且 PlaceInfo
类没有任何与 DistCache
类相关的成员。
然后我想在删除两个成员之一(placeOne 或 placeTwo)时删除 DistCache 条目
我四处搜索并找到了 cascade="remove"或 orphanRemoval=true
,但两者看起来与我的目的有些不同。
我该如何解决?
最佳答案
我可以看到对于你设置的两个 PlaceInfo 对象 nullable=false
,所以当删除一个 PlaceInfo 时,不仅要删除由 entityManager 管理的 DistCache 实体,你必须删除那些在数据库也是。
我建议您可以使用 Doctrine life cycle callbacks 中的 preRemove
事件.
在 PlaceInfo 记录的删除事件中,您查询所有使用已删除 PlaceInfo 对象的 DistCache 对象并首先删除它们。
简而言之,您需要:
在类之前添加@ORM\HasLifecycleCallbacks 以启用生命周期。
在 PlaceInfo 类中添加 preRemove 函数:
/**
* @ORM\PreRemove
* @param LifecycleEventArgs $event
*/
public function removeDistCache(LifecycleEventArgs $event)
{
$em = $event->getEntityManager();
// Use $em to query and delete the DistCache entities
}
关于php - 级联删除,每一个都删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58063259/