Rendre Doctrine1 multi-connexions fonctionnel avec ses différents Behaviors
De e-glop
- Vous utilisez Doctrine1.
- Votre modèle de données utilise des Behaviors (créant des modèles temporaires, comme ItemVersionable ou bien EventTranslation).
- Vous cherchez à utiliser un système multi-connexions / multi-bases de données
Vous n'y arrivez pas car vous faîtes l'expérience d'instabilités diverses, parfois donnant une impression d'aléatoire, voire même des plantages systématiques ? Alors ceci est fait pour vous !
Quelques références avant d'aller plus loin :
- Doctrine 1.2.x
- Bug Report sur ce sujet
Voici donc LA solution à vos soucis :
Index: doctrine/Doctrine/Record/Generator.php
===================================================================
--- doctrine/Doctrine/Record/Generator.php (révision 4690)
+++ doctrine/Doctrine/Record/Generator.php (copie de travail)
@@ -48,7 +48,7 @@
'cascadeDelete' => true,
'appLevelDelete' => false
);
-
+
/**
* Whether or not the generator has been initialized
*
@@ -161,11 +161,13 @@
}
// check that class doesn't exist (otherwise we cannot create it)
- if ($this->_options['generateFiles'] === false && class_exists($this->_options['className'])) {
+ $class_exists = class_exists($this->_options['className']);
+ if ($this->_options['generateFiles'] === false && $class_exists) {
$this->_table = Doctrine_Core::getTable($this->_options['className']);
- return false;
+ //return false;
}
+ if ( !$class_exists )
$this->buildTable();
$fk = $this->buildForeignKeys($this->_options['table']);
@@ -461,10 +463,10 @@
} else {
throw new Doctrine_Record_Exception('If you wish to generate files then you must specify the path to generate the files in.');
}
- } else {
+ } elseif ( !class_exists($definition['className']) ) {
$def = $builder->buildDefinition($definition);
eval($def);
}
}
Copiez/collez ceci dans un fichier texte. Il s'agit d'un fichier patch (mais je suppose que là, vous pensez que je vous prends pour des neuneux). Pour l'appliquer, placez vous à la racine de votre instance de Doctrine et faîtes :
$ cat $MONFICHIER | patch -p0
Essayez à nouveau votre solution web... et c'est gagné ! À bientôt pour de nouvelles aventures avec Cap'tain Crunch.