2011-10-10 7 views
5

El uso de la migración para insertar o cambiar la estructura de la tabla no es un problema para mí. Pero tengo problemas para cambiar los datos dentro de una tabla usando el modelo. Mi idea es hacer algo así:No se puede usar el modelo en la migración en Yii 1.x

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

Parece que no soy capaz de importar el modelo, porque yo estoy de error follwoing:

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

Si intento importar la modelo antes:

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

entonces el error es:

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

¿Dónde está el problema? ¿Qué estoy haciendo mal? ¿Cómo debo importar el modelo en la migración de la manera correcta? O tal vez debería reemplazar las cadenas con comandos SQL?

+0

Esto puede parecer una pregunta obvia, pero ... ¿tiene configurado correctamente el modelo CACtiveRecord, especifica el 'tableName()' correcto y la tabla existe en la base de datos? Debido a que acabo de hacer una prueba rápida al pasar por algunos modelos en una migración, pareció funcionar bien para mí. – thaddeusmt

+0

@thaddeusmt: tableName, Modelos y Tablas tenían razón. pero nunca me di cuenta de que en config/console.php hay otra configuración db. después de que cambié eso, ¡funcionó! gracias .. – zonky

+0

Ah! Sí, es complicado. ¡Me alegra que lo hayas resuelto! Tengo un archivo de configuración "base" que uso para la información DB, y luego uso CMap :: mergeArray para combinarlo con mi web y los archivos de configuración de consola para que hereden la misma información DB. – thaddeusmt

Respuesta

3

Las migraciones son definitivamente un conjunto de comandos SQL. Yo recomendaría usar un comando SELECT REPLACE. Ver http://www.1keydata.com/sql/sql-replace.html

Sin embargo, el enfoque que está tomando también debería funcionar, siempre y cuando incluya todos los archivos php necesarios. Es posible que tenga sus modelos de base también:

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

Y asegúrese de editar config/console.php tener la información de base de datos correcta.

Cuestiones relacionadas