From ab27d16efd065c14b7832172e635e1f08ea9d344 Mon Sep 17 00:00:00 2001 From: Sw3rtas Date: Wed, 3 Jul 2013 23:02:32 +0300 Subject: [PATCH] * Fixed Model::loadMultiple() when populating from formName() * Documentation corrections for data population and quoting names in SQL query --- docs/guide/database-basics.md | 4 ++-- docs/guide/upgrade-from-v1.md | 32 ++++++++++++++++++++------------ framework/yii/base/Model.php | 2 +- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/docs/guide/database-basics.md b/docs/guide/database-basics.md index cfb33c4..ade5968 100644 --- a/docs/guide/database-basics.md +++ b/docs/guide/database-basics.md @@ -136,11 +136,11 @@ Quoting table and column names Most of the time you would use the following syntax for quoting table and column names: ```php -$sql = "SELECT COUNT({{$column}}) FROM [[$table]]"; +$sql = "SELECT COUNT([[$column]]) FROM {{$table}}"; $rowCount = $connection->createCommand($sql)->queryScalar(); ``` -In the code above `{{X}}` will be converted to properly quoted column name while `[[Y]]` will be converted to properly +In the code above `[[X]]` will be converted to properly quoted column name while `{{Y}}` will be converted to properly quoted table name. The alternative is to quote table and column names manually using [[\yii\db\Connection::quoteTableName()]] and diff --git a/docs/guide/upgrade-from-v1.md b/docs/guide/upgrade-from-v1.md index 5f1cf72..c3cbf31 100644 --- a/docs/guide/upgrade-from-v1.md +++ b/docs/guide/upgrade-from-v1.md @@ -163,6 +163,26 @@ A model is now associated with a form name returned by its `formName()` method. mainly used when using HTML forms to collect user inputs for a model. Previously in 1.1, this is usually hardcoded as the class name of the model. +A new methods called `load()` and `Model::loadMultiple()` is introduced to simplify the data population from user inputs +to a model. For example, + +```php +$model = new Post; +if ($model->load($_POST)) {...} +// which is equivalent to: +if (isset($_POST['Post'])) { + $model->attributes = $_POST['Post']; +} + +$model->save(); + +$postTags = array(); +$tagsCount = count($_POST['PostTag']); +while($tagsCount-- > 0){ + $postTags[] = new PostTag(array('post_id' => $model->id)); +} +Model::loadMultiple($postTags, $_POST); +``` Yii 2.0 introduces a new method called `scenarios()` to declare which attributes require validation under which scenario. Child classes should overwrite `scenarios()` to return @@ -196,18 +216,6 @@ Controllers The `render()` and `renderPartial()` methods now return the rendering results instead of directly sending them out. You have to `echo` them explicitly, e.g., `echo $this->render(...);`. -A new method called `populate()` is introduced to simplify the data population from user inputs -to a model. For example, - -```php -$model = new Post; -if ($model->load($_POST)) {...} -// which is equivalent to: -if (isset($_POST['Post'])) { - $model->attributes = $_POST['Post']; -} -``` - Widgets ------- diff --git a/framework/yii/base/Model.php b/framework/yii/base/Model.php index 8b0d455..d2c8aa5 100644 --- a/framework/yii/base/Model.php +++ b/framework/yii/base/Model.php @@ -694,7 +694,7 @@ class Model extends Component implements \IteratorAggregate, \ArrayAccess $success = true; } } elseif (isset($data[$scope][$i])) { - $model->setAttributes($data[$scope[$i]]); + $model->setAttributes($data[$scope][$i]); $success = true; } }