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
类相关的成员。
然后我要delete the DistCache entry when one of two members(placeOne or placeTwo) is deleted
我在Google周围搜索并发现了cascade="remove" or orphanRemoval=true
,但两者的目的都不一样。
我该如何解决?
答案 0 :(得分:1)
我可以看到,您为两个PlaceInfo对象都设置了nullable=false
,因此在删除PlaceInfo时,不仅必须删除由entityManager管理的DistCache实体,还必须删除数据库中的实体。
我建议您可以使用Doctrine life cycle callbacks中的preRemove
事件。
在PlaceInfo记录的remove事件上,您查询所有使用已删除的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
}