diff --git a/cake/libs/model/model.php b/cake/libs/model/model.php index e8ee3cf48..b936fc7d7 100644 --- a/cake/libs/model/model.php +++ b/cake/libs/model/model.php @@ -2006,11 +2006,15 @@ class Model extends Overloadable { /** * 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()); diff --git a/cake/tests/cases/libs/model/model_integration.test.php b/cake/tests/cases/libs/model/model_integration.test.php index 1bf2d24bc..de7efb4c4 100644 --- a/cake/tests/cases/libs/model/model_integration.test.php +++ b/cake/tests/cases/libs/model/model_integration.test.php @@ -876,7 +876,7 @@ class ModelIntegrationTest extends BaseModelTest { } /** - * ensure that __exists is reset on create + * ensure that exists() does not persist between method calls reset on create * * @return void */ @@ -897,6 +897,30 @@ class ModelIntegrationTest extends BaseModelTest { $this->assertEqual($result['Article']['title'], 'Staying alive'); } +/** + * 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 *