Symfony Doctrine关系 - 在反面删除实体

时间:2016-10-18 08:49:58

标签: symfony doctrine-orm

我的问题是如何在不经过每个关联的情况下删除反面的实体并手动删除它。

<?php

/** @Entity */
class User
{
    // ...
    /**
     * @OneToMany(targetEntity="Address", mappedBy="user")
     */
    private $addresses;
    // ...

    public function __construct() {
        $this->addresses = new ArrayCollection();
    }
}

/** @Entity */
class Address
{
    // ...
    /**
     * @ManyToOne(targetEntity="User", inversedBy="features")
     * @JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $user;
    // ...
}

在此示例中,Address是拥有方,因此我无法删除User,因为外键验证将失败。我必须删除Address,然后删除User。如果我有这样的10个关系,删除过程是痛苦的。

我可以创建ManyToMany关系,但这样Address实体将users而不是user,我希望地址只有一个用户。

这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:2)

我希望它有所帮助。 只需将级联添加到反面实体。

/** @Entity */
class User
{
    // ...
    /**
     * @OneToMany(targetEntity="Address", mappedBy="user", cascade={"persist", "remove"})
     */
    private $addresses;
    // ...

    public function __construct() {
        $this->addresses = new ArrayCollection();
    }
    /*
     * @return ArrayCollection
     */
    public function getAddresses (){
       return $this->addresses:
    }

    /*
     * @pram Address $address
     */
    public function setAddresses (Address $address){
       $this->addresses->add ($address);
    }
}

答案 1 :(得分:0)

我没有足够的声誉来评论所以我会在这里给我2美分:

添加到@Max P.的评论:

@ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE")

您可以在此处找到更详细的答案:https://stackoverflow.com/a/6334710/4374331

希望这有帮助!