私は2つのエンティティを持っています(簡略化):
class EncryptedMasterKey {
/**
* @ORM\ManyToOne(targetEntity="ExchangeFile", inversedBy="encryptedMasterKeys")
* @ORM\JoinColumn(name="exchange_file_id", referencedColumnName="id")
*
* @var ExchangeFile
*/
protected $exchangeFile;
}
と
class ExchangeFile {
/**
* @ORM\OneToMany(targetEntity="EncryptedMasterKey", mappedBy="exchangeFile", orphanRemoval=true, cascade={"persist", "remove"})
*/
protected $encryptedMasterKeys;
}
EncryptedMasterKey
データベース内の 1 つに対して多数の が存在する場合がありExchangeFile
ます。がExchangeFile
削除されると、関連するすべての暗号化MasterKeys
が削除されます (これが事実であることorphanRemoval=true
をcascade={"persist", "remove"}
確認してください)。ここまでは順調ですね。
実際のファイルはハードディスク上で暗号化されているため、ファイルを復号化できるように少なくとも 1 つEncryptedMasterKey
存在する必要があります。したがって、 aEncryptedMasterKey
が削除され、それが の最後のものであることがわかった場合は、これ以上復号化できないため、ExchangeFile
も削除する必要があります。少なくとも 1 つがなければ生きていけません。ExchangeFile
ExchangeFile
EncryptedMasterKey
どうすればこれを達成できますか? @ORM\PreRemove
エンティティマネージャーにアクセスできないため、EncryptedMasterKey
クラス内ではあまり役に立ちません。
class EncryptedMasterKey {
//...
/** @ORM\PreRemove */
public function removeOrphanExchangeFile()
{
if ($this->exchangeFile->isTheOnlyMasterKey($this))
// I don't have access to the Entity Manager,
// so how do I delete the ExchangeFile?
}
}
これに対するエレガントな解決策はありますか?
御時間ありがとうございます。