Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixing counterCache behavior when updating an existing record's count…

…erScope value. Thanks for the patch, mattcurry. Fixes #6270.

git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@8155 3807eeeb-6ff5-0310-8944-8be069107fe0
  • Loading branch information...
commit 8bb11e49d7fb1fb708caba36b3ede5c35e6f424a 1 parent 9ab6339
Joel Perras jperras authored
17 cake/libs/model/model.php
View
@@ -1374,16 +1374,15 @@ function updateCounterCache($keys = array(), $created = false) {
$conditions = ($recursive == 1) ? (array)$assoc['counterScope'] : array();
if (isset($keys['old'][$foreignKey])) {
- if ($keys['old'][$foreignKey] == $keys[$foreignKey]) {
- continue;
+ if ($keys['old'][$foreignKey] != $keys[$foreignKey]) {
+ $conditions[$fkQuoted] = $keys['old'][$foreignKey];
+ $count = intval($this->find('count', compact('conditions', 'recursive')));
+
+ $this->{$parent}->updateAll(
+ array($assoc['counterCache'] => $count),
+ array($this->{$parent}->escapeField() => $keys['old'][$foreignKey])
+ );
}
- $conditions[$fkQuoted] = $keys['old'][$foreignKey];
- $count = intval($this->find('count', compact('conditions', 'recursive')));
-
- $this->{$parent}->updateAll(
- array($assoc['counterCache'] => $count),
- array($this->{$parent}->escapeField() => $keys['old'][$foreignKey])
- );
}
$conditions[$fkQuoted] = $keys[$foreignKey];
4 cake/tests/cases/libs/model/model.test.php
View
@@ -3990,6 +3990,10 @@ function testSaveWithCounterCacheScope() {
$TestModel2->saveField('published', true);
$result = $TestModel->findById(1);
$this->assertIdentical($result['Syfile']['item_count'], '2');
+
+ $TestModel2->save(array('id' => 1, 'syfile_id' => 1, 'published'=> false));
+ $result = $TestModel->findById(1);
+ $this->assertIdentical($result['Syfile']['item_count'], '1');
}
/**
* testDel method
Please sign in to comment.
Something went wrong with that request. Please try again.