2010-09-04 2 views
2

Je rencontre des problèmes avec la modification d'une table dans les migrations de doctrine 2. Le code suivant renvoie toujours l'erreur: L'opération 'Doctrine \ DBAL \ Plate-formes \ AbstractPlatform :: getAlterTableSQL' n'est pas prise en charge par la plateforme.Doctrine 2 migrations comment modifier une table avec une db sqlite?

Ceci est étrange car alter table est supporté par sqlite.

public function up(Schema $schema) 
{ 
    $user = $schema->getTable('user'); 
    $user->addColumn('resellerId', 'integer', array(
     'length'  => '10', 
     'notnull'  => true, 
     'unsigned'  => true, 
    )); 
} 

Répondre

4

Même si ALTER TABLE est « soutenu » par SQLite, l'ensemble des opérations autorisées est minime par rapport à la plupart des autres bases de données (http://www.sqlite.org/lang_altertable.html), d'où la raison pour laquelle il est considéré comme non pris en charge par la doctrine DBAL.

+0

J'ai également testé cela sur une base de données mysql et leur fonctionne parfaitement. – tom

+0

Alors? Cela ne change pas ma déclaration. Mysql! = Sqlite. S'il vous plaît lire ma réponse attentivement. – romanb

+2

J'ai lu attentivement votre réponse, mais je pensais que Doctrine DBAL unifie tous sql pour travailler sur un ensemble de bases de données comme MySQL SQLite, MSSQL, Oracle, ... Ou je suis si mal? – tom

0

Il y a quelques différences de déstabilisation que j'ai remarquées entre MySQL et SQLite lors de l'utilisation d'un ORM. En utilisant Doctrine, j'ai trouvé que les relations de clés étrangères ne sont pas maintenues dans SQLite comme dans MySQL.

Ceci est une douleur car j'utilise SQLite dans la mémoire dbs pour les tests unitaires car je ne peux pas garantir que les tests de persistance qui passent dans SQLite passent aussi dans MySQL. En fait, pour que SQLite dans la mémoire dbs fonctionne avec Doctrine, j'ai dû modifier le pilote Doctrine SQLite (code à http://thecodeabode.blogspot.com/2010/12/dropping-sqlite-in-memory-databases-in.html) lorsque la syntaxe sql générée pour la suppression d'une base de données échoue en mémoire dbs.

Questions connexes