Bonjour à tous,
récemment je me suis plongé dans doctrine étant donné qu'il offre pas mal de chose, donc j'ai commencé à le manipuler hors de symphony pour mieux comprendre son fonctionnement.
Avant, j'ai utilisé ce que Doctrine fournit concernant la génération des entités au format php en utilisant les docblock annotation, tout fonctionne correctement mais au fil du temps, je commence à en avoir marre de voir les annotations car si par exemple j'ai une table contenant + de quinzaine de champs , la classe générée devient de plus en plus volumineuse avec les getters et les setters.
Je me suis tourner donc vers xml mapping car personnellement je le trouve plus structurer par rapport au php mapping.
J'ai donc deux tables comme test (Category et product avec une relation one to one bidirectionnelle), j'ai créer aussi une classe (même procédure que la classe EntityGenerator.php) permettant de générer les fichiers xml.
Les fichiers générés, stockés dans un dossier /ressources/models/ ressemblent à ça :
Category :
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
 
<?xml version="1.0" encoding="UTF-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
	https://raw.github.com/doctrine/doctrine2/master/doctrine-mapping.xsd">
    <entity name="Category" table="category">
        <id column="id" name="id" type="integer">
            <generator>
                <strategy>SEQUENCE</strategy>
            </generator>
            <sequence-generator>
                <sequence-name>category_id_seq</sequence-name>
                <allocation-size>1</allocation-size>
                <initial-value>1</initial-value>
            </sequence-generator>
        </id>
        <field column="libelle_category" name="libelleCategory" type="string" />
        <one-to-one field="product" mapped-by="idCategory" target-entity="Product" />
    </entity>
</doctrine-mapping>
Product :
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
 
<?xml version="1.0" encoding="UTF-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
	https://raw.github.com/doctrine/doctrine2/master/doctrine-mapping.xsd">
    <entity name="Product" table="product">
        <id column="id" name="id" type="integer">
            <generator>
                <strategy>SEQUENCE</strategy>
            </generator>
            <sequence-generator>
                <sequence-name>product_id_seq</sequence-name>
                <allocation-size>1</allocation-size>
                <initial-value>1</initial-value>
            </sequence-generator>
        </id>
        <field column="libelle_product" name="libelleProduct" type="string" />
        <one-to-one field="idCategory" inversed-by="product" target-entity="Category">
            <join-column name="id_category" referenced-column-name="id" unique="true" />
        </one-to-one>
    </entity>
</doctrine-mapping>
Mon problème, c'est que j'arrive pas à accéder aux entités en utilisant le même syntaxe que pour le php mapping.
Le syntaxe suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
$category = $entityManager->find('Category',1);
me renvoie une erreur,
je sais pas si j'ai loupé certaines explications étant donné que suis pas très top en anglais, mais ce que je veux savoir c'est comment on y accède aux entités ? faudrait-il créer une classe pour chaque modèle ? si c'est le cas comment procède-t-on ? quelle sera sa structure ? les variables qu'on y définit etc..

En espérant de l'aide de votre part.

Cordialement