sto provando a configurare le procedure di migrazione. Purtroppo si verifica un errore di sintassi se per definire i campi utilizzo la sintassi di mysql.
Mentre se uso i tipi astratti forniti dalla piattaforma non ci sono problemi.
Apply the above migration? (yes|no) [no]:yes
*** applying m130424_103112_create_test_table
> create table test_table ...exception 'CDbException' with message 'CDbCommand failed to execute the SQL statement: CDbCommand failed to prepare the SQL statement: SQLSTATE[HY000]: General error: 1 near "UNSIGNED": syntax error. The SQL statement executed was: CREATE TABLE 'test_table' (
"id" tinyint(3) UNSIGNED NOT NULL AUTO_INCREMENT
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci' in /srv/services/im/yii/framework/db/CDbCommand.php:354
Stack trace:
#0 /srv/services/im/yii/framework/db/CDbCommand.php(1251): CDbCommand->execute()
#1 /srv/services/im/yii/framework/db/CDbMigration.php(229): CDbCommand->createTable('test_table', Array, 'ENGINE=InnoDB ...')
#2 /srv/services/im/admin/protected/migrations/m130424_103112_create_test_table.php(10): CDbMigration->createTable('test_table', Array, 'ENGINE=InnoDB ...')
#3 /srv/services/im/yii/framework/cli/commands/MigrateCommand.php(386): m130424_103112_create_test_table->up()
#4 /srv/services/im/yii/framework/cli/commands/MigrateCommand.php(110): MigrateCommand->migrateUp('m130424_103112_...')
#5 [internal function]: MigrateCommand->actionUp(Array)
#6 /srv/services/im/yii/framework/console/CConsoleCommand.php(173): ReflectionMethod->invokeArgs(Object(MigrateCommand), Array)
#7 /srv/services/im/yii/framework/console/CConsoleCommandRunner.php(68): CConsoleCommand->run(Array)
#8 /srv/services/im/yii/framework/console/CConsoleApplication.php(92): CConsoleCommandRunner->run(Array)
#9 /srv/services/im/yii/framework/base/CApplication.php(162): CConsoleApplication->processRequest()
#10 /srv/services/im/yii/framework/yiic.php(34): CApplication->run()
#11 /srv/services/im/admin/protected/yiic.php(7): require_once('/srv/services/i...')
#12 /srv/services/im/admin/protected/yiic(4): require_once('/srv/services/i...')
Grazie per la risposta, mi rendo conto adesso che la mia spiegazione era incompleta.
Il fatto è che questo query dovrebbe essere generata dal framework e passata a mySQL.
Non capisco cosa vada storto. Il codice della migrazione è il seguente:
class m130424_103112_create_test_table extends CDbMigration
{
public function up()
{
$this->createTable('test_table', array(
'id' => 'tinyint(3) UNSIGNED NOT NULL AUTO_INCREMENT',
),'ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci');
}
....
}
Da come ho letto sulla documentazione, il fatto di definire un campo con delle parole non previste dai tipi colonna astratti (integer, string, pk, text…) dovrebbe semplicemente copiare la definizione senza alterarla.
Cosa che sembra fare, ma non capisco l’errore, il codice è copiato da una query testata e funzionante.
Ok, però se avessi la necessità di generare una tabella con un campo esattamente come quello che voglio io non sarebbe possibile con questo sistema?
Sto lavorando su un db che non è stato progettato da me e ha diversi campi definiti in quel modo che sono chiavi esterne, non vorrei doverlo ristrutturare tutto.
In questa discussione e nella documentazione di CDbSchema.php c’è un chiaro riferimento al fatto che se non è possibile definire un campo con i tipi astratti si può tranquillamente usare la sintassi del database utilizzato che verrà lasciata intatta. E’ possibile che la causa degli errori sia solo quel banale problema di quoting. Credo che la causa sia intrinseca nella piattaforma come per quest’altro problema.