Rendre Doctrine1 multi-connexions fonctionnel avec ses différents Behaviors
De e-glop
Révision datée du 19 décembre 2014 à 15:35 par BeTa (discussion | contributions) (Page créée avec « * Vous utilisez Doctrine1. * Votre modèle de données utilise des Behaviors (créant des modèles temporaires, comme ItemVersionable ou bien EventTranslation). * Vous che... »)
- 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.