2011-10-10 30 views
5

使用遷移來插入或更改表結構對我來說不成問題。但是,使用模型更改表格中的數據時遇到了問題。我的想法是做這樣的事情:無法在Yii 1.x遷移中使用模型

public function up() 
{ 
    $models = MyModel::model()->findAll(); 
    foreach ($models as $variable) { 
     $variable->property = str_replace('.', ',', $variable->property); 
     $variable->save(); 
    } 
} 

看來,我是無法導入模型,因爲我得到follwoing錯誤:

*** applying m111010_084827_convert_point_2_comma 
PHP Error[2]: include(MyModel.php): failed to open stream: No such file or directory 

如果我嘗試導入模型前:

$modelClass = Yii::import('application.models.*'); 

那麼錯誤是:

*** applying m111010_084827_convert_point_2_comma 
exception 'CDbException' with message 'The table "{{mymodel}}" for active record class "MyModel" cannot be found in the database.' in C:\...\yii\framework\db\ar\CActiveRecord.php:2276 

問題在哪裏?我究竟做錯了什麼?我應該如何以正確的方式導入遷移模型?或者,也許我應該用SQL命令替換字符串?

+0

這可能看起來像一個明顯的問題,但是......你有適當的CACtiveRecord模型設置,它是否指定了正確的'tableName()',並且該表是否存在於數據庫中?因爲我剛剛在遷移中對一些模型進行了快速測試,所以對我來說似乎很好。 – thaddeusmt

+0

@thaddeusmt:tableName,模型和表是正確的。但我從來沒有意識到在config/console.php是另一個數據庫配置。之後我改變了 - 它的工作!謝謝.. – zonky

+0

啊!是的,這是一個棘手的問題。很高興你明白了!我有一個用於數據庫信息的「基礎」配置文件,然後使用CMap :: mergeArray將它與我的Web和控制檯配置文件結合起來,以便它們繼承相同的數據庫信息。 – thaddeusmt

回答

3

遷移無疑是一組SQL命令。我建議使用SELECT REPLACE命令。請參閱http://www.1keydata.com/sql/sql-replace.html

但是,只要您包含所有必需的php文件,您所採取的方法也應該可行。您可能還需要您的基本型號:

Yii::import('application.models.*'); 
    Yii::import('application.models.base.*'); 

並確保您編輯config/console.php以具有正確的數據庫信息。