From d365fafe4d4fe06621c71383ccbf52b00228726c Mon Sep 17 00:00:00 2001 From: ADmad Date: Sun, 28 Mar 2010 05:29:42 +0530 Subject: [PATCH] Changed default value for option 'validate' to 'first' in Model::saveAll(). Also fixed issue where the return array contained more keys then number of records in data array itself with options 'validate =>'first' and 'atomic'=>false --- cake/libs/model/model.php | 10 ++++++---- cake/tests/cases/libs/model/model_write.test.php | 9 +++++---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/cake/libs/model/model.php b/cake/libs/model/model.php index c75de73f8..579b21489 100644 --- a/cake/libs/model/model.php +++ b/cake/libs/model/model.php @@ -1556,9 +1556,9 @@ class Model extends Overloadable { * * #### Options * - * - validate: Set to false to disable validation, true to validate each record before - * saving, 'first' to validate *all* records before any are saved, or 'only' to only - * validate the records, but not save them. + * - validate: Set to false to disable validation, true to validate each record before saving, + * 'first' to validate *all* records before any are saved (default), + * or 'only' to only validate the records, but not save them. * - atomic: If true (default), will attempt to save all records in a single transaction. * Should be set to false if database/table does not support transactions. * - fieldList: Equivalent to the $fieldList parameter in Model::save() @@ -1579,7 +1579,7 @@ class Model extends Overloadable { } $db =& ConnectionManager::getDataSource($this->useDbConfig); - $options = array_merge(array('validate' => true, 'atomic' => true), $options); + $options = array_merge(array('validate' => 'first', 'atomic' => true), $options); $this->validationErrors = $validationErrors = array(); $validates = true; $return = array(); @@ -1626,6 +1626,7 @@ class Model extends Overloadable { break; case ($options['validate'] === 'first'): $options['validate'] = true; + $return = array(); continue; break; default: @@ -1731,6 +1732,7 @@ class Model extends Overloadable { break; case ($options['validate'] === 'first'): $options['validate'] = true; + $return = array(); continue; break; default: diff --git a/cake/tests/cases/libs/model/model_write.test.php b/cake/tests/cases/libs/model/model_write.test.php index 8be8cb6da..5a06db1fc 100644 --- a/cake/tests/cases/libs/model/model_write.test.php +++ b/cake/tests/cases/libs/model/model_write.test.php @@ -2871,7 +2871,8 @@ class ModelWriteTest extends BaseModelTest { 'title' => '', 'body' => 'Trying to get away with an empty title' ) - ), array('atomic' => false)); + ), array('validate' => true, 'atomic' => false)); + $this->assertIdentical($result, array(true, false)); $result = $TestModel->saveAll(array( @@ -2887,7 +2888,7 @@ class ModelWriteTest extends BaseModelTest { 'published' => 'Y', 'user_id' => 2 )) - ), array('atomic' => false)); + ), array('validate' => true, 'atomic' => false)); $this->assertIdentical($result, array('Article' => true, 'Comment' => array(true, true))); } @@ -2985,7 +2986,7 @@ class ModelWriteTest extends BaseModelTest { 'Comment' => array( array('comment' => '', 'published' => 'Y', 'user_id' => 1), ) - )); + ), array('validate' => true)); $expected = array('Comment' => array(false)); $this->assertEqual($result, $expected); @@ -3318,7 +3319,7 @@ class ModelWriteTest extends BaseModelTest { 'title' => '', 'body' => 'Trying to get away with an empty title' )); - $result = $TestModel->saveAll($data, array('atomic' => false)); + $result = $TestModel->saveAll($data, array('validate' => true, 'atomic' => false)); $this->assertEqual($result, array(true, false)); $result = $TestModel->find('all', array('recursive' => -1, 'order' => 'Post.id ASC')); $errors = array(1 => array('title' => 'This field cannot be left blank'));