たとえば、User、Item、Image などのエンティティがあります。ユーザーは多くのアイテムを持っています。商品画像が多いです。
cascade={'remove'} または onDelete=Cascade のどちらの削除オプションを選択すればよいですか?
また、Image にはライフサイクル コールバックがあります。上記のカスケードオプションの違いを知っています。User オブジェクトを削除するときに onDelete=cascade オプションを使用した場合、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'} のどちらのオプションを使用すればよいですか?