Added ability to pass ID as parameter to Model::exists()

This commit is contained in:
ADmad 2012-02-23 11:42:08 +05:30
parent fd927207c1
commit 4edb378ef8
2 changed files with 33 additions and 10 deletions

View file

@ -2537,19 +2537,23 @@ class Model extends Object implements CakeEventListener {
} }
/** /**
* Returns true if a record with the currently set ID exists. * Returns true if a record with particular ID exists.
* *
* Internally calls Model::getID() to obtain the current record ID to verify, * If $id is not passed it calls Model::getID() to obtain the current record ID,
* and then performs a Model::find('count') on the currently configured datasource * and then performs a Model::find('count') on the currently configured datasource
* to ascertain the existence of the record in persistent storage. * to ascertain the existence of the record in persistent storage.
* *
* @param mixed $id ID of record to check for existence
* @return boolean True if such a record exists * @return boolean True if such a record exists
*/ */
public function exists() { public function exists($id = null) {
if ($this->getID() === false) { if ($id === null) {
$id = $this->getID();
}
if ($id === false) {
return false; return false;
} }
$conditions = array($this->alias . '.' . $this->primaryKey => $this->getID()); $conditions = array($this->alias . '.' . $this->primaryKey => $id);
$query = array('conditions' => $conditions, 'recursive' => -1, 'callbacks' => false); $query = array('conditions' => $conditions, 'recursive' => -1, 'callbacks' => false);
return ($this->find('count', $query) > 0); return ($this->find('count', $query) > 0);
} }

View file

@ -24,6 +24,25 @@ require_once dirname(__FILE__) . DS . 'ModelTestBase.php';
*/ */
class ModelReadTest extends BaseModelTest { class ModelReadTest extends BaseModelTest {
/**
* testExists function
* @retun void
*/
public function testExists() {
$this->loadFixtures('User');
$TestModel = new User();
$this->assertTrue($TestModel->exists(1));
$TestModel->id = 2;
$this->assertTrue($TestModel->exists());
$TestModel->delete();
$this->assertFalse($TestModel->exists());
$this->assertFalse($TestModel->exists(2));
}
/** /**
* testFetchingNonUniqueFKJoinTableRecords() * testFetchingNonUniqueFKJoinTableRecords()
* *