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 と同じように、ユーザー エンティティが削除されるときに、「バグ」テーブル内の関連するすべてのバグが削除されているはずです。これは期待される結果ですか?