從版本 1.0 升級到 1.1
與 Model Scenarios 相關的改變
刪除了 CModel::safeAttributes()。安全屬性被定義為由 CModel::rules() 為特定場景指定的規則來驗證。
改變了 CModel::validate(), CModel::beforeValidate() 和 CModel::afterValidate()。 CModel::setAttributes(), CModel::getSafeAttributeNames() 參數 'scenario' 被刪除。你必須透過 CModel::scenario 來存取它。
改變了 CModel::getValidators() 並刪除了 CModel::getValidatorsForAttribute()。CModel::getValidators() 現在只回傳適用於 Model 指定的 scenario 的驗證器。
改變了 CModel::isAttributeRequired() 和 CModel::getValidatorsForAttribute()。Scenario 參數被刪除,改成使用 Model 的 scenario 屬性。
刪除了 CHtml::scenario。 CHtml 將使用 model 的 scenario 屬性。
與 Relational Active Record 的 Eager Loading 相關的改變
- 預設上,eager 載入涉及到的所有關聯,只有一條 JOIN 述句將被產生並執行。若主要資料表有它的
LIMIT
或OFFSET
查詢選項,它將會單獨的事先查詢,然後執行其他 SQL 述句以取回其所有關聯物件 。在版本 1.0.x 之前,預設的行為是,若一個 eager 載入涉及到N
個HAS_MANY
或MANY_MANY
關聯,將有N+1
個 SQL 語句。
與 Relational Active Record 資料表別名相關的改變
現在一個關聯表資料的預設別名和對應的關聯的名字相同。 在版本 1.0.x 之前,預設情況下 Yii 將自動為每個關聯資料表產生一個別名,我們必須使用前綴
??.
來指向自動產生的別名。在 AR 查詢中的主資料表的別名固定為
t
。在之前的版本 1.0.x,它和資料表的名字相同。在清楚的標示 column 前綴 為資料表名稱的情況下,會造成現有的 AR 查詢中斷,解決辦法是替換這些前綴為t.
。
與 Tabular 輸入相關的改變
- 對於屬性名字,使用
Field[$i]
不再是有效的,它們應當類似於[$i]Field
,這是為了支援陣列類型的字段 (例如[$i]Field[$index]
)。
其他改變
- CActiveRecord 建構器的簽章已改變。第一個參數(屬性列表) 已刪除。