Précédent   Forum du club des développeurs et IT Pro > PHP > Bibliothèques et frameworks > symfony1
symfony1 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
 
Outils de la discussion
Publicité
'
Vieux 22/03/2010, 10h25   #1
symfony30000
Membre du Club
 
Inscription : février 2010
Messages : 267
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 267
Points : 65
Points : 65
Par défaut Admin generator et jointure ?

Bonjour à tous,

je souhaiterai savoir comment peut on effectuer des jointures avec l'admin generator? comment ça ce paramètre dans generator.yml? car pour le moment je n'ai que ma table avec laquelle j'ai généré l'admin.

De plus, comment peut on modifier les templates de l'admin generator (le html et non le css) alors que les fichiers indexsuccess.php et editsucces.php sont dans le cache de symfony??

merci pour votre aide
symfony30000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2010, 11h52   #2
sacricri
Membre éclairé
 
Avatar de sacricri
 
Jean-Philippe Morvan
Inscription : juin 2008
Messages : 324
Détails du profil
Informations personnelles :
Nom : Jean-Philippe Morvan
Âge : 28

Informations forums :
Inscription : juin 2008
Messages : 324
Points : 352
Points : 352
Bonjour,

Pour effectuer un join lors de la requête de ta liste d'admin generator, il faut modifier ton generator.yml :
Code :
1
2
list:
  table_method: yourMethod
Puis dans YourModelTable.class.php :
Code :
1
2
3
4
5
6
  public function yourMethod(Doctrine_Query $q)
  {
    $rootAlias = $q->getRootAlias($q);
    $q->leftJoin($rootAlias.'.YourJoinTable c');
    return $q;
  }
Ensuite, pour utiliser les templates générés par l'admin generator, il te suffit de copier le fichier du cache nécessaire dans le répertoire template de ton module (par exemple cache/backend/dev/modules/auto_yourModule/templates/_form_header.php vers apps/backend/modules/yourModule/templates) et de le modifier à ta guise.

ps : saloper... de message qui a disparu après validation ...
sacricri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2010, 15h08   #3
symfony30000
Membre du Club
 
Inscription : février 2010
Messages : 267
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 267
Points : 65
Points : 65
ok pour tous
effectivement en collant les templates du cache dans mon module ça marche nickel.

Ensuite j'ai créé une méthode pour effectuer une requête avec jointure comme tu me là expliqué mais après comment je fait pour l'afficher dans le frontend? car la je n'ai que la table principale d'affiché et je n'arrive pas à afficher les autres champs même en modifiant le generator.yml avec l'option display:[monchamp]

merci
symfony30000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2010, 15h22   #4
sacricri
Membre éclairé
 
Avatar de sacricri
 
Jean-Philippe Morvan
Inscription : juin 2008
Messages : 324
Détails du profil
Informations personnelles :
Nom : Jean-Philippe Morvan
Âge : 28

Informations forums :
Inscription : juin 2008
Messages : 324
Points : 352
Points : 352
Nous avons 2 tables liées :
- User (avec nom et prenom comme champs)
- Infos (avec adresse comme champ)
On affiche la liste des Users et on veut afficher pour chacun leur adresse.

Ce qu'il est possible de faire dans le fichier generator.yml :
Code :
display: [nom, prenom, Adresse]
- nom et prenom viennent de la table principale (User)
- Adresse doit venir de la table jointe (Infos)

Dans lib/model/doctrine/user.class.php :
Code :
1
2
3
4
public function getAdresse()
{
  return $this->getInfos()->adresse;
}
Quand tu indiques un champ avec une majuscule dans le tableau des display, il essaye d'appeler la fonction correspondante.
Tu peux aussi faire comme ceci :
Code :
display: [nom, prenom, _adresse]
Dans apps/yourApp/modules/user/templates/_adresse.php :
Code :
<?php echo $user->getInfos()->adresse ?>
__________________
symfony power user !
sacricri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2010, 15h24   #5
sacricri
Membre éclairé
 
Avatar de sacricri
 
Jean-Philippe Morvan
Inscription : juin 2008
Messages : 324
Détails du profil
Informations personnelles :
Nom : Jean-Philippe Morvan
Âge : 28

Informations forums :
Inscription : juin 2008
Messages : 324
Points : 352
Points : 352
Ah, tu as une autre solution aussi :
Code :
display: [nom, prenom, Infos]
et dans lib/model/doctrine/infos.class.php :
Code :
1
2
3
4
public function __toString()
{
  return $this->adresse;
}
Normalement, l'admin gen utilisera la méthode toString de Infos (étant donné que c'est une table liée)
__________________
symfony power user !
sacricri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2010, 15h46   #6
symfony30000
Membre du Club
 
Inscription : février 2010
Messages : 267
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 267
Points : 65
Points : 65
ça c'est dans le cas ou la clé étrangère et dans la table user?
car dans mon cas la clé étrangère est dans la table infos

j'ai essayé les trois méthode et aucune ne marche
symfony30000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2010, 15h56   #7
sacricri
Membre éclairé
 
Avatar de sacricri
 
Jean-Philippe Morvan
Inscription : juin 2008
Messages : 324
Détails du profil
Informations personnelles :
Nom : Jean-Philippe Morvan
Âge : 28

Informations forums :
Inscription : juin 2008
Messages : 324
Points : 352
Points : 352
Peux-tu mettre le code de ton schema.yml stp (juste les deux tables et la liaison) ?
__________________
symfony power user !
sacricri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2010, 16h05   #8
symfony30000
Membre du Club
 
Inscription : février 2010
Messages : 267
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 267
Points : 65
Points : 65
voila mon schema.yml
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
hardware:
  columns:
    idHardware:
      type: integer(4)
      primary: true
      unsigned: true
      notnull: true
      autoincrement: true
    serialNumber:
      type: string(45)
      unique: true
      notnull: true
    dateProd:
      type: timestamp
      notnull: true
 
 
hwsupportlog:
  columns:
    idHWSupportLog:
      type: integer(4)
      primary: true
      unsigned: true
      notnull: true
      autoincrement: true
    date:
      type: timestamp
      notnull: true
    description:
      type: clob(65535)
      notnull: true
    hardware_idHardware:
      type: integer(4)
      unsigned: true
      notnull: true
  relations:
    hardwareIdHardware:
      class: hardware
      local: hardware_idHardware
      foreign: idHardware
      foreignAlias: hwsupportlogs
symfony30000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2010, 16h10   #9
sacricri
Membre éclairé
 
Avatar de sacricri
 
Jean-Philippe Morvan
Inscription : juin 2008
Messages : 324
Détails du profil
Informations personnelles :
Nom : Jean-Philippe Morvan
Âge : 28

Informations forums :
Inscription : juin 2008
Messages : 324
Points : 352
Points : 352
Tu veux afficher la liste de quelle table ?
__________________
symfony power user !
sacricri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2010, 16h14   #10
symfony30000
Membre du Club
 
Inscription : février 2010
Messages : 267
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 267
Points : 65
Points : 65
en faite j'affiche la table hardware et j'aimerai en même temps afficher les réparations effectué, dans ce cas la date de la dernière réparations donc le champ date
symfony30000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2010, 16h33   #11
sacricri
Membre éclairé
 
Avatar de sacricri
 
Jean-Philippe Morvan
Inscription : juin 2008
Messages : 324
Détails du profil
Informations personnelles :
Nom : Jean-Philippe Morvan
Âge : 28

Informations forums :
Inscription : juin 2008
Messages : 324
Points : 352
Points : 352
En fait, tu travailles sur une relation one to many. C'est donc là le problème :p

Je ferais donc :
- dans generator.yml
Code :
display: [serialNumber, dateProd, _dateLastRepair]
- dans apps/backend/modules/hardware/templates/_dateLastRepair.php
Code :
1
2
3
4
5
6
7
8
<?php if(count($hardware->getHwsupportlogs()) > 0): ?>
<?php foreach($hardware->getHwsupportlogs() as $repair): ?>
  <?php if($repair->date > (isset($date) ? $date: '0000-00-00 00:00:00')): ?>
    <?php $date = $repair->date ?>
  <?php endif ?>
<?php endforeach; ?>
<?php echo $date ?>
<?php endif; ?>
Ca devrait marcher mais je pense que quelque chose de plus propre est possible. Si j'ai le temps, je regarderai.
__________________
symfony power user !
sacricri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2010, 16h46   #12
symfony30000
Membre du Club
 
Inscription : février 2010
Messages : 267
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 267
Points : 65
Points : 65
oui c'est le problème
après je souhaite mettre une fiche infos, avec toutes les réparations effectués sur le produit.
Je vais essayer ta méthode

Encore un grand merci pour ton aide
symfony30000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2012, 14h58   #13
ben4459
Invité de passage
 
Homme Benjamin BRAYE
Étudiant
Inscription : octobre 2012
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme Benjamin BRAYE
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2012
Messages : 2
Points : 1
Points : 1
Par défaut Help !!!!

Bonjour à tous, j'ai la même demande à vous faire , car je n'arrive pas à effectuer votre tuto.
ben4459 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2012, 15h25   #14
gototog
Membre éprouvé
 
Homme Renaud B
Inscription : septembre 2009
Messages : 364
Détails du profil
Informations personnelles :
Nom : Homme Renaud B
Âge : 23
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : septembre 2009
Messages : 364
Points : 489
Points : 489
bonjour,
de quel tutoriel tu parles? t'as vu que le sujet date de 2010?
gototog est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 21h06.


 
 
 
 
Partenaires

Hébergement Web