Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Changes Model::find() to allow modification of DataSource connection …

…during callbacks.
  • Loading branch information...
commit fd6538fc72c7d008c9c34408d791c8d3d66c3f40 1 parent 4766f62
Nate Abele nateabele authored
4 cake/libs/model/model.php
View
@@ -2020,7 +2020,6 @@ function find($conditions = null, $fields = array(), $order = null, $recursive =
list($type, $query) = array($conditions, $fields);
}
- $db =& ConnectionManager::getDataSource($this->useDbConfig);
$this->findQueryType = $type;
$this->id = $this->getID();
@@ -2067,6 +2066,9 @@ function find($conditions = null, $fields = array(), $order = null, $recursive =
}
}
+ if (!$db =& ConnectionManager::getDataSource($this->useDbConfig)) {
+ return false;
+ }
$results = $db->read($this, $query);
$this->resetAssociations();
$this->findQueryType = null;
16 cake/tests/cases/libs/model/model_read.test.php
View
@@ -4877,6 +4877,22 @@ function testCallbackDisabling() {
$this->assertEqual($result, $expected);
}
+ /**
+ * Tests that the database configuration assigned to the model can be changed using
+ * (before|after)Find callbacks
+ *
+ * @return void
+ */
+ function testCallbackSourceChange() {
+ $this->loadFixtures('Post');
+ $TestModel = new Post();
+ $this->assertEqual(3, count($TestModel->find('all')));
+
+ $this->expectError(new PatternExpectation('/Non-existent data source foo/i'));
+ $this->expectError(new PatternExpectation('/Only variable references/i'));
+ $this->assertFalse($TestModel->find('all', array('connection' => 'foo')));
+ }
+
/**
* testMultipleBelongsToWithSameClass method
*
12 cake/tests/cases/libs/model/models.php
View
@@ -857,6 +857,18 @@ class Post extends CakeTestModel {
* @access public
*/
var $belongsTo = array('Author');
+
+ function beforeFind($queryData) {
+ if (isset($queryData['connection'])) {
+ $this->useDbConfig = $queryData['connection'];
+ }
+ return true;
+ }
+
+ function afterFind($results) {
+ $this->useDbConfig = 'test_suite';
+ return $results;
+ }
}
/**
Please sign in to comment.
Something went wrong with that request. Please try again.