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.
This commit is contained in:
Joël Perras 2010-01-14 16:42:16 -05:00
parent 199a14f3be
commit adb0c809a0
2 changed files with 30 additions and 2 deletions

View file

@ -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());

View file

@ -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
*