01.23
php
saved
kain
Note
Implementing counterCache support in cake 1.2.
not tested very much but should work.
Implementing counterCache support in cake 1.2.
not tested very much but should work.
- class CounterCacheBehavior extends ModelBehavior {
- // not yet
- $method = $this->defaultSettings['method'];
- $method = $config['method'];
- }
- 'method' => $method
- );
- }
- function afterSave(&$model) {
- foreach ($model->belongsTo as $parent => $assoc) {
- $parent = $assoc['className'];
- }
- $assoc['counterCache'] = $assoc['counterCache'] === true ? Inflector::underscore($model->name).'_count' : $assoc['counterCache'];
- $assoc['foreignKey'] = !empty($assoc['foreignKey']) ? $assoc['foreignKey'] : Inflector::singularize($parent).'_id';
- if ($model->{$parent}->hasField($assoc['counterCache']) && !empty($model->data[$model->name][$assoc['foreignKey']])) {
- $foreign_id = $model->data[$model->name][$assoc['foreignKey']];
- $conditions = !empty($assoc['counterCacheConditions']) ? $assoc['counterCacheConditions'] : '1 = 1';
- $model->{$parent}->create();
- $model->{$parent}->id = $foreign_id;
- $model->{$parent}->saveField($assoc['counterCache'], intval($model->findCount("{$model->name}.{$assoc['foreignKey']} = {$foreign_id} AND {$conditions}", -1)));
- }
- }
- }
- return true;
- }
- function beforeDelete(&$model) {
- foreach ($model->belongsTo as $parent => $assoc) {
- $parent = $assoc['className'];
- }
- $assoc['counterCache'] = $assoc['counterCache'] === true ? Inflector::underscore($model->name).'_count' : $assoc['counterCache'];
- $assoc['foreignKey'] = !empty($assoc['foreignKey']) ? $assoc['foreignKey'] : Inflector::singularize($parent).'_id';
- if ($model->{$parent}->hasField($assoc['counterCache'])) {
- $this->assocs[$assoc['foreignKey']] = $associations[$model->name][$assoc['foreignKey']];
- }
- }
- }
- return true;
- }
- function afterDelete(&$model) {
- foreach ($model->belongsTo as $parent => $assoc) {
- $parent = $assoc['className'];
- }
- $assoc['counterCache'] = $assoc['counterCache'] === true ? Inflector::underscore($model->name).'_count' : $assoc['counterCache'];
- $assoc['foreignKey'] = !empty($assoc['foreignKey']) ? $assoc['foreignKey'] : Inflector::singularize($parent).'_id';
- $conditions = !empty($assoc['counterCacheConditions']) ? $assoc['counterCacheConditions'] : '1 = 1';
- $count = intval($model->findCount("{$model->name}.{$assoc['foreignKey']} = {$this->assocs[$assoc['foreignKey']]} AND {$conditions}", -1));
- $model->{$parent}->id = $this->assocs[$assoc['foreignKey']];
- $model->{$parent}->saveField($assoc['counterCache'], $count);
- }
- }
- return true;
- }
- } // end class
Parsed in 0.220 seconds, using GeSHi 1.0.7.14