2011-10-10 10 views
5

Użycie migracji do wstawienia lub zmiany struktury tabeli nie jest dla mnie problemem. Ale mam problem z wymianą danych w tabeli przy użyciu modelu. Mój pomysł jest zrobić coś takiego:Nie można użyć modelu podczas migracji w Yii 1.x

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

Wydaje się, że jestem w stanie importować model, bo jestem coraz follwoing błąd:

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

Gdy próbuję zaimportować Model wcześniej:

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

następnie błąd jest:

*** 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 

Gdzie jest problem? Co ja robię źle? W jaki sposób mam zaimportować model do migracji we właściwy sposób? A może powinienem zastąpić ciągi poleceniami SQL?

+0

To może wydawać się oczywistym pytaniem, ale ... czy masz ustawiony prawidłowy model CACtiveRecord, czy określa on poprawną 'tableName()' i czy tabela istnieje w bazie danych? Ponieważ właśnie przeprowadziłem szybki test przechodząc przez niektóre modele podczas migracji, wydawało mi się, że to działa dobrze. – thaddeusmt

+0

@thaddeusmt: tableName, modele i tabele miały rację. ale nigdy nie zdawałem sobie sprawy, że w config/console.php jest inna konfiguracja db. po tym jak to zmieniłem - zadziałało! dzięki .. – zonky

+0

Ah! Tak, to trudne. Cieszę się, że to wymyśliliście! Mam "podstawowy" plik konfiguracyjny, którego używam do informacji DB, a następnie używam CMap :: mergeArray do łączenia go z moimi plikami konfiguracji web i konsoli, aby dziedziczyły te same informacje DB. – thaddeusmt

Odpowiedz

3

Migracje są z pewnością zbiorem poleceń SQL. Polecam za pomocą polecenia WYBIERZ REPLACE. Patrz: http://www.1keydata.com/sql/sql-replace.html

Jednak podejście, które podejmujesz, powinno również działać, o ile uwzględnisz wszystkie wymagane pliki php. Być może trzeba modeli bazowych również:

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

I upewnij się edytować config/console.php mieć poprawne informacje bazy danych.

Powiązane problemy