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 :
Voici la partie de mon YML qui a l'air de poser problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Could not map doctrine 1 type 'float'!
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.
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
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 :
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
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
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.
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 ;
Si quelqu'un sait comment intégrer doctrine 2 à Zend 1.10, je l'en remercie
Partager