Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/03/2011, 12h33   #1
Invité de passage
 
Inscription : février 2010
Messages : 38
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 38
Points : 2
Points : 2
Par défaut Convertir un id du backend

Bonjour ,

J'ai une relation entre des tables dans mon schema qui me permettent de repertorier les elements d'un menu pour une pizzeria , le soucis c'est que dans le backend lorsque je fais new ou edit je récupère bien les noms de mes entree_id salades_id etc .. mais dans list cela ne m'affiche pas les noms mais les id comment faire pour remplacer les id par les nom dans list ?

Voici mon schema :

Code :
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
 
Menu:
  columns:
    id: { type: integer,  primary: true , autoincrement: true }
    produit : { type: integer }
    nom: { type: string }
    type: { type: string }      
    entree_id : { type: integer (10) }
    salade_id : { type: integer (10) }    
    pizza_id : {type : integer(10) }
    dessert_id : { type : integer(10) }
    boisson_id : { type: integer (10)}
    prix: { type: string  } 
 
Entree : 
  columns :
    id: { type : integer , primary : true , autoincrement : true }
    nom : { type : string }
    description : { type : string }
    prix : { type : integer }
    type : { type : string }
  relations:
    Menu: { onDelete : CASCADE, local: id , refClass: Menu, foreign : entree_id , foreignAlias : Entrees }
 
Boisson : 
  columns :
    id: { type : integer , primary : true , autoincrement : true }
    nom : { type : string }
    description : { type : string }
    prix : { type : integer }
  relations:
    Menu: { onDelete : CASCADE, local: id , refClass: Menu, foreign : boisson_id, foreignAlias : Boissons }
 
Pizza : 
  columns :
    id: { type : integer , primary : true , autoincrement : true }
    nom : { type : string }
    description : { type : string }
    prix : { type : integer }
  relations:
    Menu: { onDelete : CASCADE, local: id , refClass: Menu, foreign : pizza_id, foreignAlias : Pizzas }
 
Salades :
  columns :
    id: { type : integer , primary : true , autoincrement : true }
    nom : { type : string }
    description : { type : string }
    prix : { type : integer }
    type : { type : string }
  relations:
    Menu: { onDelete : CASCADE, local: id , refClass: Menu, foreign : salade_id, foreignAlias : Saladess }
 
Dessert :
  columns :
    id: { type : integer , primary : true , autoincrement : true }
    nom : { type : string }
    description : { type : string }
    prix : { type : integer }
    type : { type : string }
  relations:
    Menu: { onDelete : CASCADE, local: id , refClass: Menu, foreign : dessert_id, foreignAlias : Desserts }
 
News:
  columns:
    id: { type: integer,  primary: true , autoincrement: true }
    type: { type: integer ,  notnull: true }
    description:  { type: string ,  notnull: true }
 
Newsletter:
  columns:
    id: { type: integer,  primary: true , autoincrement: true }
    nom: { type: string ,  notnull: true }      
    email: { type: string ,  notnull: true }
 
Produit:
  columns:
    id: { type: integer,  primary: true , autoincrement: true }
    nom: { type: string ,  notnull: true }
    logo: { type: string ,  notnull: true }
    description: { type: string ,  notnull: true }
    prix: { type: float ,  notnull: true }
    type: { type: string ,  notnull: true }
 
Categories:
  columns:
    id: { type: integer,  primary: true , autoincrement: true }      
    nom: { type: string ,  notnull: true }
    type: { type: integer,  notnull: true }
 
Magasins:
  columns:
    id: { type: integer,  primary: true , autoincrement: true }      
    nom: { type: string ,  notnull: true }
    ville : { type: string ,  notnull: true }
    numero: { type: integer,  notnull: true }
    adresse : { type: string ,  notnull: true }
dnd888 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 14h30   #2
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Niveau schéma, je pense que les tables entree, pizza, desert, boisson... auraient gagnée à être mutualisées.

Pour ton problème, modifie le modèle de l'entité (table) dans li/modelr/doctrine et tu rajoutes une méthode __toString() qui retourne ce que tu veux voir afficher pour l'enregistrement.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 10h10   #3
Invité de passage
 
Inscription : février 2010
Messages : 38
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 38
Points : 2
Points : 2
Citation:
Envoyé par Michel Rotta Voir le message
Niveau schéma, je pense que les tables entree, pizza, desert, boisson... auraient gagnée à être mutualisées.

Pour ton problème, modifie le modèle de l'entité (table) dans li/modelr/doctrine et tu rajoutes une méthode __toString() qui retourne ce que tu veux voir afficher pour l'enregistrement.
Merci michel , mais j'ai déjà utilisé la méthode magique toString , j'utilise maintenant les foreign alias pour faire des getter sur mes elements et malgré le __toString j'obtient ca :

<pre> Doctrine_Collection data : Array( 0 : Object(Entree) ) </pre> <pre> Doctrine_Collection data : Array( 0 : Object(Dessert) ) </pre>

Normalement cela devrait me retourner les noms je pige plus rien la
dnd888 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 10h22   #4
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Je ne comprend pas ta demande.

Si tu utilises des widget select, le __toString() est la méthode à utiliser.

Si tu utilises autre choser, il va falloir être plus précis dans la demande. Un peu de code qui pose problème, d'où il vient serait aussi intéressant que le message d'erreur qu'il produit.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 10h35   #5
Invité de passage
 
Inscription : février 2010
Messages : 38
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 38
Points : 2
Points : 2
En fait , je n'utilise aucun widget en particulier , c'est mon formulaire qui est auto généré dans mon backend et qui me génère un select a cause de mon schéma relationnel.

Lorsque je suis en mode new / edit , je récupère bien les noms associés à mes xxxxx_id grace à la méthode toString getnom (avec nom un champ de ma table ). Le soucis est qu'en mode List ( donc generator.yml ) quand j'affiche dans mon display xxxxx_id je ne récupère que l'id la méthode __toString n'étant pas prise en compte , j'ai verifié dans le Jobeet et c'est tout à fait normal. Donc j'utilise les alias comme dans le jobeet afin d'y afficher les noms associés , hors au lieu d'obtenir les noms j'obtient :
<pre> Doctrine_Collection data : Array( 0 : Object(Entree) ) </pre> <pre> Doctrine_Collection data : Array( 0 : Object(Dessert) ) </pre>

J'espère que tu pourra m'aider
dnd888 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 11h30   #6
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Tu peux mettre ton generator.yml ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 11h59   #7
Invité de passage
 
Inscription : février 2010
Messages : 38
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 38
Points : 2
Points : 2
Citation:
Envoyé par Michel Rotta Voir le message
Tu peux mettre ton generator.yml ?

Je te repose aussi mon schema :


Code :
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
 
Menu:
  columns:
    id: { type: integer,  primary: true , autoincrement: true }
    produit : { type: integer }
    nom: { type: string }
    type: { type: string }      
    entree_id : { type: integer (10) }
    salades_id : { type: integer (10) }
    pizza_id : {type : integer(10) }    
    dessert_id : { type : integer(10) }
    boisson_id : { type: integer (10)}    
    prix: { type: string } 
 
Entree : 
  columns :
    id: { type : integer , primary : true , autoincrement : true }
    nom : { type : string }
    description : { type : string }
    prix : { type : integer }
    type : { type : string }
  relations:
    Menu: { onDelete : CASCADE, local: id , foreign : entree_id ,foreignAlias : Entrees }
 
Boisson : 
  columns :
    id: { type : integer , primary : true , autoincrement : true }
    nom : { type : string }
    description : { type : string }
    prix : { type : integer }
  relations:
    Menu: { onDelete : CASCADE, local: id , foreign : boisson_id, foreignAlias : Boissons }
 
Pizza : 
  columns :
    id: { type : integer , primary : true , autoincrement : true }
    nom : { type : string }
    description : { type : string }
    prix : { type : integer }
  relations:
    Menu: { onDelete : CASCADE, local: id , foreign : pizza_id, foreignAlias : Pizzas }
 
Salades :
  columns :
    id: { type : integer , primary : true , autoincrement : true }
    nom : { type : string }
    description : { type : string }
    prix : { type : integer }
    type : { type : string }
  relations:
    Menu: { onDelete : CASCADE, local: id ,  foreign : salades_id, foreignAlias : Saladess }
 
Dessert :
  columns :
    id: { type : integer , primary : true , autoincrement : true }
    nom : { type : string }
    description : { type : string }
    prix : { type : integer }
    type : { type : string }
  relations:
    Menu: { onDelete : CASCADE, local: id , foreign : dessert_id, foreignAlias : Desserts }
 
News:
  columns:
    id: { type: integer,  primary: true , autoincrement: true }
    type: { type: integer ,  notnull: true }
    description:  { type: string ,  notnull: true }
 
Newsletter:
  columns:
    id: { type: integer,  primary: true , autoincrement: true }
    nom: { type: string ,  notnull: true   }
    email: { type: string ,  notnull: true  }
 
Produit:
  columns:
    id: { type: integer,  primary: true , autoincrement: true }
    nom: { type: string ,  notnull: true }
    logo: { type: string ,  notnull: true }
    description: { type: string ,  notnull: true }
    prix: { type: float ,  notnull: true }
    type: { type: string ,  notnull: true }
 
Categories:
  columns:
    id: { type: integer,  primary: true , autoincrement: true }      
    nom: { type: string ,  notnull: true }
    type: { type: integer,  notnull: true }
 
Magasins:
  columns:
    id: { type: integer,  primary: true , autoincrement: true }      
    nom: { type: string ,  notnull: true }
    ville : { type: string ,  notnull: true }
    numero: { type: integer,  notnull: true }
    adresse : { type: string ,  notnull: true }
Code :
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
 
 
generator:
  class: sfDoctrineGenerator
  param:
    model_class:           menu
    theme:                 admin
    non_verbose_templates: true
    with_show:             false
    singular:              ~
    plural:                ~
    route_prefix:          menu
    with_doctrine_route:   true
    actions_base_class:    sfActions
 
    config:
      actions: ~
      fields:  ~
      list:        
        display : [Entrees,Desserts]
      filter:
        class : false
      form:    ~
      edit:    ~        
      new:     ~
dnd888 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 12h32   #8
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
De mémoire, cette méthode ne fonctionne que pour les listes où les colonnes sont regroupées dans une cellule.

Si non il doit être possible d'utiliser des partials.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 16h16   #9
Invité de passage
 
Inscription : février 2010
Messages : 38
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 38
Points : 2
Points : 2
Peut tu me donner un exemple ?
dnd888 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 16h36   #10
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Tu as un exemple ici.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 16h34   #11
Invité de passage
 
Inscription : février 2010
Messages : 38
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 38
Points : 2
Points : 2
Malheuresement ca ne m'aide pas , sur le frontend j'aurais juste fait un foreach sur la doctrine_collection et j'aurais récupéré facilement l'objet en cours mais la avec du generator et du schema je vois pas -_-
dnd888 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 18h00   #12
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Je n'ai pas d'application sous la mains...

Regarde dans ton cache, tu as une arbo qui ressemble à celle de ton application.

Notamment tu vas y trouver ton module auto-généré (si non, lance le et retourne dans le cache).

Regarde les templates, le template qui affiche la liste. Repère le nom de l'objet et réutilise le.

Désolé pour la réponse précédente, mais j'étais parti sur l'affichage d'un form.

Si non, il est aussi possible de changer le nom de la méthode du modèle qui retourne le données. Et donc de changer les données retournées. Et donc de retourner ce que tu veux. Donc tu peux directement retourner le nom des plats.

C'est aussi une autre solution.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h26.


 
 
 
 
Partenaires

Hébergement Web