Upgrading Instructions for Yii Framework v1.0.9 =============================================== !!!IMPORTANT!!! The following upgrading instructions are cumulative. That is, if you want to upgrade from version A to version C and there is version B between A and C, you need to following the instructions for both A and B. Upgrading from v1.0.8 --------------------- - ActiveRecord lazy loading is changed for optimization purpose. Previously, when lazy loading occurs, the related table will be joined with the primary table. Now, the related table will be queried without joining the primary table. As a result, if you are using lazy loading and the corresponding relation declaration includes reference to the primary table, the query will fail. To fix this problem, please specify the lazy loading query options with the actual primary table column values. Upgrading from v1.0.7 --------------------- - A directory imported using Yii::import() will have precedence over any existing include paths. For example, if we import 'application.models.*', then the corresponding directory will be searched before any other existing include paths. This also means, a directory imported later will have precedence over directories imported earlier. Previously, this order was reversed. This change may affect you if you have several classes with the same name and they are imported via different directories. You will need to adjust the import order of these directories to make sure your existing applications are not broken due to this change. Upgrading from v1.0.6 --------------------- - Default named scope will no longer be applied to INSERT, UPDATE and DELETE queries. It is only applied to SELECT queries. You should be aware of this change if you override CActiveRecord::defaultScope() in your code. - The signature of CWebUser::logout() is changed. If you override this method, you will need to modify your method declaration accordingly. Upgrading from v1.0.5 --------------------- Upgrading from v1.0.4 --------------------- - CWebUser::checkAccess() takes an additional parameter to allow caching the access check results. If you override this method, you will need to modify your method declaration accordingly. Because the new parameter will enable caching the access check results by default, please double check your code containing this method call to make sure the behavior is as expected. - CDateParser has been renamed to CDateTimeParser Upgrading from v1.0.3 --------------------- - The signature of CWebModule::init() is modified. Its parameter is removed. If your application uses modules, you have to modify your module class files accordingly. Upgrading from v1.0.2 --------------------- - Controllers that are organized in subdirectories are now referenced using the ID format "path/to/xyz". Previously it was "path.to.xyz". If you use "path.to.xyz" in your application, you have to modify it to "path/to/xyz". - CHtml::coreScript() is removed. If you used this in your application, please use the following alternative: Yii::app()->clientScript->registerCoreScript($name); Upgrading from v1.0.1 --------------------- - Due to the introduction of the scenario-based massive assignment feature, we removed CActiveRecord::protectedAttributes(). Please use safeAttributes() to specify which attributes are safe to be massively assigned. For more details about scenario-based assignment and validation, please read the following tutorial section: http://www.yiiframework.com/doc/guide/form.model#securing-attribute-assignments - The signature of CModel::validate() has been changed to: CModel::validate($scenario='', $attributes=null) That is, the order of the two parameters has been swapped. If your application contains code that invokes the validate() method (of either a CFormModel or a CActiveRecord object) with some parameter, please make sure you fix the parameter order. - The usage of CActiveRecord::with() and the 'with' option in relations has been changed. In order to query child relations, we should specify the 'with' parameter/option like the following now: Post::model()->with(array('comments', 'author.profile'))->findAll(); Previously, this should be written as: Post::model()->with(array('comments', 'author'=>'profile'))->findAll(); If your code does not involve child relations (like 'profile' in the above), nothing needs to be changed. This change has been introduced in order to support dynamic relational query options. For example, we can specify that comments be sorted in descending order (assuming in the relations() method it is specified as ascending order): Post::model()->with(array( 'comments'=>array('order'=>'createTime DESC'), 'author.profile', ))->findAll(); Upgrading from v1.0.0 --------------------- - An $scenario parameter is added to both CModel::beforeValidate() and afterValidate(). If you override these methods in your child classes (form models, AR classes), make sure you change the method signature accordingly.