|
|
@@ -1546,8 +1546,8 @@ class Model extends Object {
|
|
|
if (!array_key_exists($foreignKey, $keys)) {
|
|
|
$keys[$foreignKey] = $this->field($foreignKey);
|
|
|
}
|
|
|
- $recursive = (isset($assoc['counterScope']) ? 1 : -1);
|
|
|
- $conditions = ($recursive == 1) ? (array)$assoc['counterScope'] : array();
|
|
|
+ $recursive = (isset($assoc['counterScope']) ? 0 : -1);
|
|
|
+ $conditions = ($recursive === 0) ? (array)$assoc['counterScope'] : array();
|
|
|
|
|
|
if (isset($keys['old'][$foreignKey])) {
|
|
|
if ($keys['old'][$foreignKey] != $keys[$foreignKey]) {
|
|
|
@@ -1562,7 +1562,7 @@ class Model extends Object {
|
|
|
}
|
|
|
$conditions[$fkQuoted] = $keys[$foreignKey];
|
|
|
|
|
|
- if ($recursive == 1) {
|
|
|
+ if ($recursive === 0) {
|
|
|
$conditions = array_merge($conditions, (array)$assoc['counterScope']);
|
|
|
}
|
|
|
$count = intval($this->find('count', compact('conditions', 'recursive')));
|
|
|
@@ -1960,15 +1960,25 @@ class Model extends Object {
|
|
|
$this->_deleteLinks($id);
|
|
|
$this->id = $id;
|
|
|
|
|
|
+ $updateCounterCache = false;
|
|
|
if (!empty($this->belongsTo)) {
|
|
|
+ foreach ($this->belongsTo as $parent => $assoc) {
|
|
|
+ if (!empty($assoc['counterCache'])) {
|
|
|
+ $updateCounterCache = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
$keys = $this->find('first', array(
|
|
|
'fields' => $this->__collectForeignKeys(),
|
|
|
- 'conditions' => array($this->alias . '.' . $this->primaryKey => $id)
|
|
|
+ 'conditions' => array($this->alias . '.' . $this->primaryKey => $id),
|
|
|
+ 'recursive' => -1,
|
|
|
+ 'callbacks' => false
|
|
|
));
|
|
|
}
|
|
|
|
|
|
if ($db->delete($this, array($this->alias . '.' . $this->primaryKey => $id))) {
|
|
|
- if (!empty($this->belongsTo)) {
|
|
|
+ if ($updateCounterCache) {
|
|
|
$this->updateCounterCache($keys[$this->alias]);
|
|
|
}
|
|
|
$this->Behaviors->trigger('afterDelete', array(&$this));
|
|
|
@@ -2035,7 +2045,8 @@ class Model extends Object {
|
|
|
$records = $this->{$joinModel}->find('all', array(
|
|
|
'conditions' => array_merge(array($this->{$joinModel}->escapeField($data['foreignKey']) => $id)),
|
|
|
'fields' => $this->{$joinModel}->primaryKey,
|
|
|
- 'recursive' => -1
|
|
|
+ 'recursive' => -1,
|
|
|
+ 'callbacks' => false
|
|
|
));
|
|
|
if (!empty($records)) {
|
|
|
foreach ($records as $record) {
|