質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

4030閲覧

UpdateAllでbeforeSaveを行う方法を教えて下さい(PHP)

jnwsc

総合スコア21

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2014/12/28 11:08

updateAll()に、beforeSave()とafterSave() のコールバックをトリガしたいです。

IDフィールドをアップデートしたいので、updateAll()を使っています。

save()が行っている感じで、beforeSave()とafterSave()を行うように、updateAll()をトリガしたいです。

CakePHP 1.3を使用しています。updateAll()のハックです。

lang

1function updateAll($fields, $conditions = true) { 2 $args = func_get_args(); 3 $oput = call_user_func_array(array('parent', 'updateAll'), $args); 4 if ($oput) { 5 $created = false; 6 $options_arr = array(); 7 $this->Behaviors->trigger($this, 'afterSave', array( 8 $created, 9 $options_arr, 10 )); 11 12 $this->afterSave($created); 13 $this->_clearCache(); 14 return true; 15 } 16 return false; 17}

下記はCakePHP 2.3で編集したコードです。

lang

1function updateAll($fields, $conditions = true) { 2 $args = func_get_args(); 3 $oput = call_user_func_array(array('parent', 'updateAll'), $args); 4 if ($oput) { 5 $created = false; 6 $options_arr = array(); 7 $event = new CakeEvent('Model.afterSave', $this, array($created, $options_arr)); 8 $this->getEventManager()->dispatch($event); 9 10 $this->afterSave($created); 11 $this->_clearCache(); 12 return true; 13 } 14 return false; 15}

もし、updateAllでbeforeSave()をコールしたいときはどうしたらいいのでしょうか?
わかる方がおられたらアドバイスお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

下記のコードを使ってみて下さい。

lang

1function updateAll($fields, $conditions = true) { 2 3 $options_arr = array(); 4 $eventObj = new CakeEvent('Model.beforeSave', $this, array($options_arr)); 5 list($eventObj->break, $eventObj->breakOn) = array(true, array(false, null)); 6 $this->getEventManager()->dispatch($eventObj); 7 8 $args = func_get_args(); 9 $oput = call_user_func_array(array('parent', 'updateAll'), $args); 10 if ($oput) { 11 $created = false; 12 $options_arr = array(); 13 $eventObj = new CakeEvent('Model.afterSave', $this, array($created, $options_arr)); 14 $this->getEventManager()->dispatch($eventObj); 15 16 $this->afterSave($created); 17 $this->_clearCache(); 18 return true; 19 } 20 return false; 21} 22コード

マニュアルにより詳しい説明があるので、そちらも参照して下さい。
beforesave
aftersave

投稿2014/12/28 15:08

kantafks

総合スコア49

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問