2011-10-10 4 views
5

L'utilizzo della migrazione per inserire o modificare la struttura della tabella non è un problema per me. Ma ho problemi a cambiare i dati all'interno di una tabella usando il modello. La mia idea è quella di fare qualcosa di simile:Impossibile utilizzare il modello nella migrazione in Yii 1.x

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

Sembra, che sono in grado di importare il modello, perché sto ottenendo l'errore follwoing:

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

Se provo a importare il Modello prima:

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

allora l'errore è:

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

Dov'è il problema? Che cosa sto facendo di sbagliato? Come devo importare il modello nella migrazione nel modo giusto? O forse dovrei sostituire le stringhe con i comandi SQL?

+0

Questa può sembrare una domanda ovvia ma ... hai il corretto modello CACtiveRecord impostato, specifica il corretto 'tableName()', e la tabella esiste nel database? Perché ho appena fatto un rapido test per il passaggio di alcuni modelli in una migrazione che sembrava funzionare bene per me. – thaddeusmt

+0

@thaddeusmt: tableName, Modelli e tabelle avevano ragione. ma non ho mai capito che in config/console.php c'è un'altra configurazione db. dopo che l'ho cambiato - ha funzionato! grazie .. – zonky

+0

Ah! Sì, è difficile. Sono contento che tu l'abbia capito! Ho un file di configurazione "base" che uso per le informazioni sul DB, e quindi utilizzo CMap :: mergeArray per combinarlo con i miei file di configurazione web e console in modo che ereditino le stesse informazioni del DB. – thaddeusmt

risposta

3

Le migrazioni sono sicuramente destinate a essere un insieme di comandi SQL. Consiglierei di usare un comando SELECT REPLACE. Vedi http://www.1keydata.com/sql/sql-replace.html

Tuttavia, l'approccio che si sta prendendo dovrebbe funzionare anche se si includono tutti i file php richiesti. Potresti aver bisogno anche dei tuoi modelli di base:

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

E assicurati di modificare config/console.php per avere le informazioni corrette sul database.