にCakePHP,どのようにすることができますを決定する方法の分野の変更は編集すものです。
質問
私が使っているの cacheCounter
に CakePHP
, る単位でカウンター関連分野
例では、sales Personテーブルからソース。ます。source_idマップ列のソース。それぞれ一つのソースと、各ソースなしには多くの人にされています。
cacheCounter
は時に変更したい価値の源泉です。で単位 Source.Person_Count
.クールです。
この場合、開示する単位で追加で、先源、なかなかできないので削除してから古い値とする。てみました updateCacheControl()
に afterSave
, ものともしなかった。
そのために書いた一部のコード私のモデル afterSave
その減算をソースsource_idでいたこともなかったものに変更する source_id
.(でカウントした。
私の質問:があるので、教えてくれる分野のモデル CakePHP
?
解決
の変化をモニタリング分野でご利用いただくことができ論理モデルとの変化などが必要です:
function beforeSave() {
$this->recursive = -1;
$this->old = $this->find(array($this->primaryKey => $this->id));
if ($this->old){
$changed_fields = array();
foreach ($this->data[$this->alias] as $key =>$value) {
if ($this->old[$this->alias][$key] != $value) {
$changed_fields[] = $key;
}
}
}
// $changed_fields is an array of fields that changed
return true;
}
他のヒント
を参照 アレクサンダー Morland 答えになります。
この代わりにループを通する前にフィルター
$result = array_diff_assoc($this->old[$this->alias],$this->data[$this->alias]);
を取得しました値。
を編集ビューなども隠しをしたいのモニタが接尾辞をフィールド名という"_prev"と設定値は電流フィールドの値がしたい。その後コントローラのアクションの編集う場合、二つの分野は平等なものとする。例えば
echo $form->input('field_to_monitor');
echo $form->hidden('field_to_monitor_prev', array('value'=>$form->value('field_to_monitor')));
編集が起こる頻度が少ない別の選択を実施する前に、更新しくはありませんので、を取り出し記録する前に保存保存しますを比較し、に、データの提出の編集フォルムを実現するとともにデータ取得からdbする前に保存したい場合、何もしないわけにはいかない。
見た場合、"保存"は、なんらかのDBALこのサイトのコンを返します"影響を受け行"、通常はここからは判断できる場合、または最後のクエリを変更データの場合、またいですね。だかの影響を受け行後に更新を計算書は0になります。
話ができgetAffectedRows(ス)モデルクラス。
からモデルクラス:
/**
* Returns the number of rows affected by the last query
*
* @return int Number of rows
* @access public
*/
function getAffectedRows() {
$db =& ConnectionManager::getDataSource($this->useDbConfig);
return $db->lastAffected();
}