0

Zend フレームワークで doctrine 2.0 を使用しています。私は、双方向の一対多関係を共有する次の 2 つのエンティティを持っています。

バグ表

/**
 * Bugs
 *
 * @Table(name="bugs")
 * @Entity
 */
class Bugs
{
    /**
     * @var integer $id
     *
     * @Column(name="id", type="integer")
     * @Id
     * @GeneratedValue
     */
    private $id;

    /**
     * @ManyToOne(targetEntity="Users", inversedBy="reportedBugs",cascade={"persist","remove"})
     * @JoinColumn(name="reporter_id", referencedColumnName="id")
     **/
    protected $reporter;

    public function setReporter($reporter)
    {
        $reporter->addReportedBug($this);
        $this->reporter = $reporter;
    }

ユーザー テーブル

/**
 * Users
 *
 * @Table(name="users")
 * @Entity
 */
class Users
{

     /**
     * @var integer $id
     *
     * @Column(name="id", type="integer")
     * @Id
     * @GeneratedValue
     */
    private $id;

    /**
     * @OneToMany(targetEntity="Bugs", mappedBy="reporter",cascade={"persist","remove"})
     * @var Bugs[]
     **/

    private $reportedBugs = null;

    public function addReportedBug($bug)
    {
        $this->reportedBugs[] = $bug;
    }

    public function __construct()
    {
        $this->reportedBugs = new \Doctrine\Common\Collections\ArrayCollection();

    }

}

リレーションの両側に cascade = {"remove"} があることがわかります。

ケース 1: 逆サイド (ユーザー) からエンティティを削除すると、このユーザーを参照する関連するすべてのバグが「バグ」テーブルから削除されます。これは予期される動作です。

ケース 2: 所有側 (バグ) からエンティティを削除すると、参照されたユーザー エンティティは「ユーザー」テーブルから削除されますが、この削除は「バグ」内のこのユーザー エンティティの関連付けられたエンティティにカスケードされません。テーブル。ケース 1 と同じように、ユーザー エンティティが削除されるときに、「バグ」テーブル内の関連するすべてのバグが削除されているはずです。これは期待される結果ですか?

4

0 に答える 0