From adb0c809a0aa4cda88ebb8a1cd73b94fbc5146fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=ABl=20Perras?= Date: Thu, 14 Jan 2010 16:42:16 -0500 Subject: [PATCH] Refactoring Model::exists() to be independent of Model::$useTable. Fixes #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. --- cake/libs/model/model.php | 6 ++++- .../libs/model/model_integration.test.php | 26 ++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) 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 *