Browse files

Refactoring Model::exists() to be independent of Model::$useTable. Fi…

…xes #199.

Model::exists() now makes no check whatsoever on the value of
Model::$useTable. This means that, as with a database-backed dbo,
Model::exists() will call Model::find('count') (which in turn calls
DataSource::read()) to determine if the record identified by Model::$id
already exists in the datasource.
  • Loading branch information...
1 parent 199a14f commit adb0c809a0aa4cda88ebb8a1cd73b94fbc5146fa @jperras jperras committed Jan 14, 2010
Showing with 30 additions and 2 deletions.
  1. +5 −1 cake/libs/model/model.php
  2. +25 −1 cake/tests/cases/libs/model/model_integration.test.php
View
6 cake/libs/model/model.php
@@ -2006,11 +2006,15 @@ function __collectForeignKeys($type = 'belongsTo') {
/**
* Returns true if a record with the currently set ID exists.
*
+ * Internally calls Model::getID() to obtain the current record ID to verify,
+ * and then performs a Model::find('count') on the currently configured datasource
+ * to ascertain the existence of the record in persistent storage.
+ *
* @return boolean True if such a record exists
* @access public
*/
function exists() {
- if ($this->getID() === false || $this->useTable === false) {
+ if ($this->getID() === false) {
return false;
}
$conditions = array($this->alias . '.' . $this->primaryKey => $this->getID());
View
26 cake/tests/cases/libs/model/model_integration.test.php
@@ -876,7 +876,7 @@ function testLoadModelSecondIteration() {
}
/**
- * ensure that __exists is reset on create
+ * ensure that exists() does not persist between method calls reset on create
*
* @return void
*/
@@ -898,6 +898,30 @@ function testResetOfExistsOnCreate() {
}
/**
+ * testUseTableFalseExistsCheck method
+ *
+ * @return void
+ */
+ function testUseTableFalseExistsCheck() {
+ $this->loadFixtures('Article');
+ $Article =& new Article();
+ $Article->id = 1337;
+ $result = $Article->exists();
+ $this->assertFalse($result);
+
+ $Article->useTable = false;
+ $Article->id = null;
+ $result = $Article->exists();
+ $this->assertFalse($result);
+
+ // An article with primary key of '1' has been loaded by the fixtures.
+ $Article->useTable = false;
+ $Article->id = 1;
+ $result = $Article->exists();
+ $this->assertTrue($result);
+ }
+
+/**
* testPluginAssociations method
*
* @access public

0 comments on commit adb0c80

Please sign in to comment.