データの削除

エンティティの削除

deleteメソッドでエンティティを削除する。

<?php
$entity = $this->Articles->get(2);
$result = $this->Articles->delete($entity);
?>

連鎖削除

エンティティーを削除するとき関連データを削除することもできる。テーブルの初期化メソッドにおいてHasOne や HasMany が dependent として設定されている場合、削除処理はそれらのエンティティーにも連鎖適用される。

<?php
// テーブル内の初期化メソッド
$this->hasMany('Comments', [
    'dependent' => true,
    'cascadeCallbacks' => true,
]);
?>

一括削除

deleteAll()で、引数の条件を満たすレコードを一括削除できる。

<?php
// 全てのスパムを削除する
function destroySpam()
{
    return $this->deleteAll(['is_spam' => true]);
}
?>

厳密な削除

deleteOrFail()は、次の条件で Cake\ORM\Exception\PersistenceFailedException を投げます。

  • エンティティーが新しい場合
  • エンティティーが主キーの値を持たない場合
  • アプリケーションルールのチェックが失敗した場合
  • 削除コールバックによって中断された場合
<?php
try {
    $table->deleteOrFail($entity);
} catch (\Cake\ORM\Exception\PersistenceFailedException $e) {
    echo $e->getEntity(); // エラー内容を表示
}
?>