例如,我有像User,Item,Image这样的实体。用户有很多项目。物品有很多图像。在原则2中删除操作
我应该选择哪种删除选项,cascade = {'remove'}还是onDelete = Cascade?
此外,我有图像上的生命周期回调。我知道上述级联选项的区别。我想知道如果我使用onDelete = cascade选项,删除一个User对象,像PostRemove()这样的生命周期回调会被调用吗?
这里是我的实体:
//User.php
class User {
/**
* @ORM\OneToMany(targetEntity="Item", mappedBy="user", onDelete="CASCADE")
*/
private $items;
}
//Item.php
class Item {
/**
* @var User
*
* @ORM\ManyToOne(targetEntity="User", inversedBy="items")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
* })
*/
private $user;
/**
* @ORM\OneToMany(targetEntity="ItemImage", mappedBy="item",onDelete="CASCADE")
*/
protected $images;
}
//ItemImage.php
class ItemImage {
/* Setters and getter **/
/**
* @var Items
*
* @ORM\ManyToOne(targetEntity="Item", inversedBy="images")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="item_id", referencedColumnName="id")
* })
*/
private $item;
/**
* @ORM\PostRemove()
*/
public function removeUpload() {
unlink($this->getUploadDir() . '/' . $this->imageName);
}
}
我的问题是,当一个用户被删除,将与用户和相关物品图像相关联的所有项目被删除?我还希望在删除用户时调用Image实体的PostRemove()回调?对于这种情况,我应该使用哪种选项,onDelete =“cascade”或cascade = {'remove'}?
所以我应该在$ User-> items,$ Item-> images或$ Item-> images中添加cascade = {“remove”}?我正在谈论删除用户时的情况。 – sonam 2013-02-22 15:07:25
您应该将'cascade = {“remove”}'添加到'User-> items'和'Item-> images'。您可能还想考虑[其他级联操作](http://docs.doctrine-project.org/zh/2.0.x/reference/working-with-associations.html#transitive-persistence-cascade-operations)但他们不太感兴趣。 – 2013-02-23 08:07:09