Bonjour,
Dans le cadre d'un projet, j'ai décidé de me lancer sur Doctrine 2.
J'ai réussi à l'intégrer partiellement à Zend. La ligne de commande marche et j'arrive à interroger la base de donnée.
Le seul problème vien lors de la génération de mes différentes entity, proxies, ...

Avant, sous Doctrine 1.X, nous pouvions générer, à partir de notre BDD, les fichiers YML et les classes métier.

Maintenant, avec Doctrine 2, nous devons générer les entities à partir de fichiers de mapping (métadata en YML, XML, ...). Le problème, c'est que ces fichiers ne peuvent être générer à partir de la BDD avec doctrine 2 (enfin j'ai rien trouvé).

J'ai donc créer des fichiers YML de la BDD avec mysql Workbench. Le souci, c'est que ces fichiers ne sont pas compatibles Doctrine 2.

Heureusement, la commande doctrine a un utilitaire pour convertir le YML. Et là, cerise sur le gâteau, je tombe sur un énorme problème. J'ai beau écumer la doc, les aides, les forums, je ne trouve rien.

Ayant vu que certains se sont tournés aussi vers Doctrine 2 sous Zend ou sous autre chose, vous pourrez surement me dire d'où cela peut provenir.

Mon souci c'est que lors de la conversion, j'ai le message d'erreur suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Could not map doctrine 1 type 'float'!
Voici la partie de mon YML qui a l'air de poser problème :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
tVenue:
  tableName: t_venues
  columns:
    ven_id:
      type: integer(4)
      primary: true
      notnull: true
      autoincrement: true
    ven_title:
      type: string(250)
      default: null
    ven_adress:
      type: clob(65535)
      notnull: true
    ven_zip:
      type: string(10)
      notnull: true
    cit_id:
      type: integer(4)
      notnull: true
    cit_label:
      type: string(150)
      notnull: true
    ven_lat:
      type : float
      default: null
    ven_long:
      type : float
      default: null
  indexes:
    cit_id:
      fields: [cit_id]
  options:
    charset: utf8
    collate: utf8_unicode_ci
J'ai beau regarder, cette déclaration est bien conforme doctrine 1. Je pourrai faire tout le YML à la main mais j'ai plus d'une cinquantaine de table à gérer et ce serait vraiment fastidieux.

Si quelqu'un sait résoudre mon problème de conversion ou, si quelqu'un sait comment générer le YML Doctrine 2.0 à partir d'une BDD mysql, je suis preneur.

EDIT :

J'ai réussis à créer mes fichiers YML en modifiant float par decimal.
Maintenant le souci c'est que je n'arrive pas à ajouter de préfixes aux entités lors de la génération.

Par exemple, je voudrai leur ajouter le préfixe Models_ afin de les placer dans mon dossier models et de n'avoir aucun problème avec Zend.

Pour palier à ceci, j'ai voulu utilisé un script permettant de faire un reverse engineering avec Doctrine 2 http://www.doctrine-project.org/jira/browse/DDC-616
Le souci, c'est que ça ne marche pas. Voyez plutôt :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
PHP Fatal error:  Uncaught exception 'Doctrine\ORM\Mapping\MappingException' with message 'Property "teapHeaderpol" in "TTemplatesAppli" was already declared, but it must be declared only once' in /var/www/goomeoevent/private/library/Doctrine/ORM/Mapping/MappingException.php:156
Stack trace:
#0 /var/www/goomeoevent/private/library/Doctrine/ORM/Mapping/ClassMetadataInfo.php(1064): Doctrine\ORM\Mapping\MappingException::duplicateFieldMapping('TTemplatesAppli', 'teapHeaderpol')
#1 /var/www/goomeoevent/private/library/Doctrine/ORM/Mapping/ClassMetadataInfo.php(1017): Doctrine\ORM\Mapping\ClassMetadataInfo->_storeAssociationMapping(Object(Doctrine\ORM\Mapping\OneToOneMapping))
#2 /var/www/goomeoevent/private/library/Doctrine/ORM/Mapping/ClassMetadataInfo.php(1040): Doctrine\ORM\Mapping\ClassMetadataInfo->mapOneToOne(Array)
#3 /var/www/goomeoevent/private/library/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php(136): Doctrine\ORM\Mapping\ClassMetadataInfo->mapManyToOne(Array)
#4 /var/www/goomeoevent/private/library/Doctrine/ORM/Mappin in /var/www/goomeoevent/private/library/Doctrine/ORM/Mapping/MappingException.php on line 156
 
Doctrine\ORM\Mapping\MappingException: Property "teapHeaderpol" in "TTemplatesAppli" was already declared, but it must be declared only once in /var/www/goomeoevent/private/library/Doctrine/ORM/Mapping/MappingException.php on line 156
 
Call Stack:
    0.0005     658288   1. {main}() /var/www/goomeoevent/private/application/bin/doctrine-bd-to-mapper.php:0
    0.0327    4632280   2. Doctrine\ORM\Mapping\ClassMetadataFactory->getAllMetadata() /var/www/goomeoevent/private/application/bin/doctrine-bd-to-mapper.php:37
    0.2838    7611896   3. Doctrine\ORM\Mapping\ClassMetadataFactory->getMetadataFor() /var/www/goomeoevent/private/library/Doctrine/ORM/Mapping/ClassMetadataFactory.php:102
    0.2838    7611896   4. Doctrine\ORM\Mapping\ClassMetadataFactory->_loadMetadata() /var/www/goomeoevent/private/library/Doctrine/ORM/Mapping/ClassMetadataFactory.php:155
    0.2838    7617360   5. Doctrine\ORM\Mapping\Driver\DatabaseDriver->loadMetadataForClass() /var/www/goomeoevent/private/library/Doctrine/ORM/Mapping/ClassMetadataFactory.php:256
    0.2891    7724128   6. Doctrine\ORM\Mapping\ClassMetadataInfo->mapManyToOne() /var/www/goomeoevent/private/library/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php:136
    0.2891    7724128   7. Doctrine\ORM\Mapping\ClassMetadataInfo->mapOneToOne() /var/www/goomeoevent/private/library/Doctrine/ORM/Mapping/ClassMetadataInfo.php:1040
    0.2892    7730552   8. Doctrine\ORM\Mapping\ClassMetadataInfo->_storeAssociationMapping() /var/www/goomeoevent/private/library/Doctrine/ORM/Mapping/ClassMetadataInfo.php:1017
voici la déclaration de cette table

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DROP TABLE IF EXISTS `t_templates_appli`;
CREATE TABLE IF NOT EXISTS `t_templates_appli` (
  `teap_id` int(11) NOT NULL AUTO_INCREMENT,
  `evt_id` int(11) NOT NULL,
  `teap_ongletcode` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `teap_ongletbck` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `teap_headerbck` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `teap_contentbck` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `teap_onglettxtcolor` varchar(9) COLLATE utf8_unicode_ci NOT NULL,
  `teap_contenttxtcolor` varchar(9) COLLATE utf8_unicode_ci NOT NULL,
  `teap_headertxtcolor` varchar(9) COLLATE utf8_unicode_ci NOT NULL,
  `teap_headerpol` int(11) NOT NULL,
  `teap_contentpol` int(11) NOT NULL,
  PRIMARY KEY (`teap_id`),
  KEY `evt_id` (`evt_id`),
  KEY `teap_headerpol` (`teap_headerpol`),
  KEY `teap_contentpol` (`teap_contentpol`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
Là je ne vois pas d'où ça peut venir. Il parle d'un problème de redéclaration hors, il est bien présent qu'une fois.

Si quelqu'un sait comment intégrer doctrine 2 à Zend 1.10, je l'en remercie