CakePHP3のアソシエーション機能を使い関連レコードをまとめて削除
2017/10/28
CakePHP3のアソシエーション機能を使い関連レコードをまとめて削除
CakePHP3のアソシエーション機能による削除処理の解説
「CakePHP3でassociatedを使って関連データをまとめて保存する方法(hasOne、hasMany、belongsTo)」の記事で、アソシエーション機能を使って関連するレコードをまとめて保存する処理の解説をしました。
今回は、そのまとめて保存したレコードを、まとめて削除する処理を解説します。
テーブルの構造などは、「CakePHP3でassociatedを使って関連データをまとめて保存する方法(hasOne、hasMany、belongsTo)」を参照してください。
コントローラーの修正はありません
下記のソースは、Bakeで作成したソースですが、コントローラーの修正は全くありません。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
public function delete($id = null) { $this->request->allowMethod(['post', 'delete']); $entryData = $this->EntryDatas->get($id); if ($this->EntryDatas->delete($entryData)) { $this->Flash->success(__('The site name has been deleted.')); } else { $this->Flash->error(__('The site name could not be deleted. Please, try again.')); } return $this->redirect(['action' => 'index']); } |
Tableファイルに「'dependent' => true」を追加
処理を追加する対象のファイルは「EntryDatasTable.php」です。
「EntryDatasTable.php」にある「hasMany」に「’dependent’ => true」を追加することで、関連テーブルの情報がまとめて削除されます。
|
1 2 3 4 5 6 7 8 9 |
public function initialize(array $config) { : : $this->hasMany('JobDatas', [ 'foreignKey' => 'entry_datas_id' 'dependent' => true ]); } |
たったこれだけのコードを追加するだけで、「EntryDatas」テーブルのレコードを削除する際に、関連する「JobDatas」テーブルのレコードもすべて削除してくれます。
アソシエーション機能を使って関連データを保存する際にも感じましたが、削除する場合も簡単に関連データを削除でき、まさにフレームワークを使うメリットを存分に発揮する箇所ですね。
詳細については、CakePHP3のマニュアルを参照してください。
https://book.cakephp.org/3.0/ja/orm/deleting-data.html
CakePHP3の関連記事
CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールする
CakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
その他の「CakePHP3」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP4のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。ユーザ新規登録の流れを紹介しつつ、テンプレートファイル、設定情報ファイルの場所とそれらをカスタマイズする方法を説明します。
-
-
CakePHP3の検索プラグイン「friendsofcake/search」の設置方法・CakePHP3.6対応
CakePHP3で検索を担うプラグイン「friendsofcake/search」の紹介。基本的な設置方法の紹介のほか、処理の記述方法のバリエーション、エラーの解説など。CakeDC/searchより導入は簡単!
-
-
CakePHP3、CakePHP4のキャッシュをクリアする方法「bin/cake cache clear_all」を使う
CakePHP3、CakePHP4では処理を高速化する手法の一つとしてキャッシュを利用している。しかし、その情報は元の情報を更新しても反映されない場合がある。そんなときはキャッシュを削除する必要がある。
-
-
CakePHP 2.3でファイルをアップロード・その2 ファイル名を乱数で設定
CakePHPのアップロードするファイル名を乱数で変更しセキュリティを高める方法を解説。
-
-
CakePHP 2.3 Search Pluginで検索処理 その3入力エリア一つで複数の項目を同時に検索する方法
CakePHPの検索プラグイン Search Pluginの検索処理の中で入力エリア一つで複数の項目を同時に検索する方法を解説。
-
-
CakePHP3のタイムゾーンを協定世界時UTCから日本標準時間JSTにずれを変更する方法
CakePHP3の標準設定のタイムゾーンは「UTC(協定世界時)」に設定されている。これを日本標準時に変更する方法(app.php、bootstrap.phpの変更方法)の解説。
-
-
CakePHP3で /Layout/defult.ctpにある titleタグ、h1タグを編集する方法
CakePHP3でtitleタグ、h1タグのテキストをデフォルトから変更する方法を解説。テンプレートファイルに「$this->assign()」でテキストを指定して「/Layout/defult.ctp」で受け取る。
-
-
CakePHP3でCookieを保存、呼び出し、削除の操作・CakePHP3.7対応
CakePHP3.7でCookieを保存、取り出し、削除する方法を解説。CakePHP3でのCookieの取り扱いはバージョンごとに変更されるため、環境に合わせた方法を探す必要がある。
-
-
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3でデフォルトのソート条件を設定しつつ画面上でユーザがソート条件を選択したときもソート処理を実行させる方法を解説。ソート条件はページネーションの処理として実装。
-
-
CakePHP3ログファイルへの出力・$this->log()、独自ログへの出力方法の解説
コントロール、モデルの変数の中身を見るときはログに出力する方法が有効です。$this->log()を利用すると変数だけじゃなく、連想配列、オブジェクトも簡単にログ出力ができます。