Only enable cacheSources if both the datasource + model agree on it.

This prevents models from flipping cacheSources on when the datasource
has it disabled already.

Refs #2364
This commit is contained in:
mark_story 2013-11-19 17:32:31 -05:00
parent 99fd6e40fe
commit ec38ee1c48
2 changed files with 5 additions and 4 deletions

View file

@ -843,6 +843,7 @@ class Model extends Object implements CakeEventListener {
} }
} }
if (!$className) { if (!$className) {
return false; return false;
} }
@ -1128,7 +1129,7 @@ class Model extends Object implements CakeEventListener {
if (method_exists($db, 'listSources')) { if (method_exists($db, 'listSources')) {
$restore = $db->cacheSources; $restore = $db->cacheSources;
$db->cacheSources = $this->cacheSources; $db->cacheSources = ($restore && $this->cacheSources);
$sources = $db->listSources(); $sources = $db->listSources();
$db->cacheSources = $restore; $db->cacheSources = $restore;

View file

@ -155,17 +155,17 @@ class ModelIntegrationTest extends BaseModelTest {
} }
/** /**
* Tests that $cacheSources can only be disabled in the db using model settings, not enabled * Tests that $cacheSources is restored despite the settings on the model.
* *
* @return void * @return void
*/ */
public function testCacheSourcesDisabling() { public function testCacheSourcesRestored() {
$this->loadFixtures('JoinA', 'JoinB', 'JoinAB', 'JoinC', 'JoinAC'); $this->loadFixtures('JoinA', 'JoinB', 'JoinAB', 'JoinC', 'JoinAC');
$this->db->cacheSources = true; $this->db->cacheSources = true;
$TestModel = new JoinA(); $TestModel = new JoinA();
$TestModel->cacheSources = false; $TestModel->cacheSources = false;
$TestModel->setSource('join_as'); $TestModel->setSource('join_as');
$this->assertFalse($this->db->cacheSources); $this->assertTrue($this->db->cacheSources);
$this->db->cacheSources = false; $this->db->cacheSources = false;
$TestModel = new JoinA(); $TestModel = new JoinA();