Doctrine orm 删除第2条中的行动
例如,我有像用户、项目、图像这样的实体。用户有许多项。项目有许多图像 我应该选择哪个删除选项,cascade={'remove'}还是onDelete=cascade 此外,我还有关于图像的生命周期回调。我知道上述级联选项之间的区别。我想知道在删除用户对象时是否使用了onDelete=cascade选项,是否会调用像PostRemove()这样的生命周期回调 以下是我的实体:Doctrine orm 删除第2条中的行动,doctrine-orm,doctrine,Doctrine Orm,Doctrine,例如,我有像用户、项目、图像这样的实体。用户有许多项。项目有许多图像 我应该选择哪个删除选项,cascade={'remove'}还是onDelete=cascade 此外,我还有关于图像的生命周期回调。我知道上述级联选项之间的区别。我想知道在删除用户对象时是否使用了onDelete=cascade选项,是否会调用像PostRemove()这样的生命周期回调 以下是我的实体: //User.php class User { /** * @ORM\OneToMany(targetEn
//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 entity的PostRemove()回调?对于这种情况,我应该使用哪个选项,onDelete=“cascade”或cascade={'remove'}?
onDelete='cascade'
将在删除cascade时添加SQL级别。因此,是的,图像将从表中删除。这是非常有效的,因为数据库处理删除
要让侦听器调用cascade={'remove'}
是必需的。这会使我们获取对象的图形,这会更慢
两个选项可以同时指定。在这种情况下,条令将按最后一段所述执行,但并非来自条令的DELETE
s也将正确级联;显然,在这种情况下不会调用侦听器
我倾向于仅在这种情况下指定cascade={'remove'}
,以避免在未调用侦听器的情况下意外地DELETE
s(如果没有针对未引用文件的清理任务)
详细信息可以在.中找到,所以我应该在$User->items、$Item->images中添加cascade={“remove”},还是只在$Item->images中添加?我说的是用户被删除的情况。您应该将cascade={“remove”}
添加到user->items
和Item->images
。你可能也想考虑一下,但他们不太可能感兴趣。