php - 级联删除,每一个都删除

标签 php mysql doctrine

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/

相关文章:

javascript - Angular JS ng-repeat 无法使用 PHP 数组获取输出

php - 使用 Docker 运行 Laravel artisan 命令时连接被拒绝

mysql内连接查询运行缓慢

php - 伊伊 : how to select 1 registration using the best method

mysql - 使用 LIMIT 在 MySQL 中查找结果总数的 Doctrine 查询

javascript - 如何通过下拉列表更新数据库而不重新加载页面

php - GMail LDAP 身份验证?

php - 如何从 createQueryBuilder 获取 sql?

c# - 将数据绑定(bind)/设置源到我的 DataGrid [WPF] 的正确方法是什么

php - 当我尝试使用 Doctrine 创建数据库时,为什么会收到 PDOException?