【问题标题】:Symfony Doctrine relationships - delete entity on the inverse sideSymfony Doctrine 关系 - 删除反面的实体
【发布时间】:2017-02-27 10:58:09
【问题描述】:

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

<?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,并且我希望地址只有一个用户。

最好的方法是什么?

【问题讨论】:

标签: symfony doctrine-orm


【解决方案1】:

希望对您有所帮助。 只需将级联添加到反向实体即可。

/** @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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    相关资源
    最近更新 更多