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から外部のデータベースにアクセスする方法解説
CakePHP4のシステムから他のシステムのデータベースにアクセスをし、SQL文を実行する方法を解説。try-catchでエラーを取得する方法も解説。
-
-
CakePHP3のルーティング(routes.php)の変更が反映されない時はキャッシュのクリアを
CakePHP3でルーティングの設定変更をしたけど反映されない!そんなときは慌てず騒がずキャッシュをクリアしよう!ルーティングの設定もキャッシュされることがあるらしい。
-
-
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3でデフォルトのソート条件を設定しつつ画面上でユーザがソート条件を選択したときもソート処理を実行させる方法を解説。ソート条件はページネーションの処理として実装。
-
-
CakePHP4で定数の設定と呼び出し方法の解説(defineとConfigure)
CakePHP4で定数を設定、使用する方法を解説。定数定義はdefineとConfigureを使用する方法を解説。また、bootstrap.phpに直接記述する方法と別のファイルにする方法を解説。
-
-
CakePHP3でデータを保存する save()で発生するエラーを確認する方法を解説
CakePHP3でデータ保存処理のログを取得する方法。save()では true、falseの戻り値しか取得できないが、saveOrFail()と try…catch文を使いエラーログ、エンティティを取得し、不具合の解析を行う。
-
-
CakePHP3にデイトピッカー jQuery UI DatePickerを実装する手順の解説
CakePHP3にjQuery UIのDatePickerを実装する手順を説明。併せて、デイトピッカーを設置に関連するCakePHP3の解説と、テーマを変更したり、表記を変更するカスタマイズする方法なども紹介。
-
-
CakePHP3の更新画面でUpload Plugin 3.0を使う方法、viewで使う方法解説・その3
CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその3で記事を更新する際のファイルの取り回しなどについてを解説。
-
-
CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法
CakePHP4でコマンドを実行する際に引数(パラメータ)をコマンド内で受け取る処理について解説。複数個の引数にも対応する記述方法も解説。
-
-
CakePHP4、CakePHP5系の認証処理でログインの有無の確認、ユーザ情報の取得の方法
CakePHP4系、5系のログイン認証の可否のチェック、および、ログインユーザの情報を取得する方法のまとめ。複数の方法があるが手続きが微妙に異なるためまとめてみた。
-
-
CakePHP3のForm Helperの使い方のまとめ
CakePHP3になりフォームヘルパーの使い方も大きく変わりましたので、使い方をまとめました。基本的な使い方からプラスアルファの便利な使い方まで紹介。