從版本 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] 建構器的簽章已改變。第一個參數(屬性列表) 已刪除。