IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Jointure Admin Generator [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web Etudiant
    Inscrit en
    Avril 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web Etudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 34
    Par défaut Jointure Admin Generator
    Bonjour,

    Débutant en sf, je viens de crée mon interface admin.

    Voici mon schema.yml (réduit)


    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Element:
      connection: doctrine
      tableName: element
      columns:
        element_id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        page_id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        element_titre:
          type: string()
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
      relations:
        Element:
          local: element_id
          foreign: element_id
          type: one
    Page:
      connection: doctrine
      tableName: page
      columns:
        page_id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        page_nom:
          type: string()
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
     relations:
        Element:
          local: page_id
          foreign: page_id
          type: many
    J'affiche le contenue de la table Element, jusque là c'est ok, et je veux crée ma jointure pour remplacé page_id par page_nom (dans l'affiche de Element).
    J'ai essayé deux méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    list : 
    peer_method: doSelectJoinAll
    Résultat : apparemment pas prix en compte dans les nouvelles versions... (Your generator configuration contains some errors for the "list" context. The following configuration cannot be parsed: array( 'peer_method' => 'doSelectJoinAll',).) de l'admin. j'ai essayé list : with : Page, mais j'ai mal du m'y prendre...

    Et donc dernier essai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          list:
              table_method : getPageNomJoin
     display : [=element_id, page, element_titre]
    et dans ElementTable.class.php
    public function getPageNomJoin(Doctrine_Query $q)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      {
        $rootAlias = $q->getRootAlias();
        $q->leftJoin($rootAlias . '.Page p');
        return $q;
      }
    Résulat : Catchable fatal error: Method Page::__toString() must return a string value

    Vous avez des idées, des choses que j'aurais mal fait ?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 124
    Par défaut
    Ton schéma est faux, en gros, tu as des erreurs dans tes local et foreign, tu as mis une relation en miroir (dans les deux classes) ce qui est inutile et tu t'es trompé de nom dans les relations je pense.

    Doc de doctrine : http://www.doctrine-project.org/proj...rm/1.2/docs/en

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web Etudiant
    Inscrit en
    Avril 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web Etudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 34
    Par défaut
    j'ai fait le schéma sur MySQL Work Bench.

    Jusqu'à là je n'avais pas de problème, et phpmyadmin détecte bien les relations (il me met un lien sur page_id (celui de Element) ou me fait une liste des id lors du update/new).

  4. #4
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 124
    Par défaut
    Les générateurs de schéma en YAML ne fonctionne pas bien. Tant que tu n'as pas un existant assez conséquent, commence toujours par crée le fichier YAML et génère la BDD à partir de celui-ci.

  5. #5
    Membre Expert Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    Si je ne me trompe pas quelqu'un avait déjà fait la remarque que je vais te faire sur un autre forum à savoir : MySQL Work Bench c'est plutôt sympa pour dégrossir et avoir une base, mais rien de tel que son petit cerveau pour faire un schema propre.

    Si j'ai bien compris pour un Element tu n'as qu'une Page donc quand tu te trouves dans le generator.yml de ton Element essaye voir ça tout simplement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    config:
      actions: ~
      fields:  ~
      list:
        display: [ Page, element_titre ]
      filter:  ~
      form:    ~
      edit:    ~
      new:     ~
    Si ton schema est bien construit ça devrait suffire.

    Je te link un tuto plutôt bien expliqué qui explique dans un premier temps comment afficher le nom sur une colonne étrangère dans l'admin gen' plutôt que l'id et si tu veux pousser le bouchon plus loin ça t'explique aussi comment faire la fonction de tri sur cette colonne.

    http://www.elao.org/symfony/symfony-...trangeres.html

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web Etudiant
    Inscrit en
    Avril 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web Etudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 34
    Par défaut
    merci de ta réponse, mais la bdd doit être mal construite...

    No description for object of class "Page"

    PS : j'ai plusieurs pages.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 124
    Par défaut
    J'aime pas trop faire ça, mais voila comment je vois ton schéma :
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Element:
      connection: doctrine
      tableName: element
      columns:
        id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        page_id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        element_titre:
          type: string()
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
      relations:
        Page:
          local: element_id
          foreign: id
          foreignAlias: Elements
    Page:
      connection: doctrine
      tableName: page
      columns:
        id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        page_nom:
          type: string()
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
    Regarde le, comprend le et tu pourra l'utiliser. Un conseil, appel toujours tes clés primaires id.

  8. #8
    Membre averti
    Homme Profil pro
    Développeur Web Etudiant
    Inscrit en
    Avril 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web Etudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 34
    Par défaut
    En fonction d'autre topic, je viens de modif le schéma de la bdd :

    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
    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
    Element:
      connection: doctrine
      tableName: element
      columns:
        element_id:
          type: integer(4)
          primary: true
          autoincrement: true
        page_id:
          type: integer(4)
          notnull: true
        element_type:
          type: string(255)
          notnull: true
        element_titre:
          type: string()
          notnull: true
        element_maj:
          type: timestamp(25)
          notnull: true
        element_verrou:
          type: integer(4)
          notnull: true
          autoincrement: false
      relations:
        Page:
          local: element_id
          foreign: id
          foreignAlias: Elements
    Image:
      connection: doctrine
      tableName: image
      columns:
        image_id:
          type: integer(4)
          primary: true
          autoincrement: true
        image_type:
          type: string(255)
          notnull: true
        image_title:
          type: string()
          notnull: true
        image_description:
          type: string()
          notnull: true
        image_lien:
          type: string()
          notnull: true
        element_id:
          type: integer(4)
          notnull: true
        image_maj:
          type: timestamp(25)
          notnull: true
      relations:
        Element:
          local: image_id
          foreign: id
          foreignAlias: Images
    Page:
      connection: doctrine
      tableName: page
      columns:
        page_id:
          type: integer(4)
          primary: true
          autoincrement: true
        page_nom:
          type: string()
          notnull: true
        page_lien:
          type: string()
          notnull: true
        page_titre:
          type: string()
          notnull: true
        page_description:
          type: string()
          notnull: true
        page_parent:
          type: integer(4)
          notnull: true
        page_maj:
          type: timestamp(25)
          notnull: true
    Il me reste donc à regénérer model form et filter il me semble.

    Pouvez-vous relire et me dire ce qui ne va pas au schéma ?

  9. #9
    Membre Expert Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    Citation Envoyé par hugo_dev Voir le message
    merci de ta réponse, mais la bdd doit être mal construite...
    C'est ce qu'il me semblait également.

    Si tu as du one to many tu pourra voir le one dans l'admin gen du many, aussi bien dans la list que le form ou le filter.

    Si tu as du many to many, tu verras des listes de sélection dans le form et le filter.


    (du moins il me semble ... jetez-moi des cailloux si j'me trompe)

    EDIT :
    PS : j'ai plusieurs pages.
    On s'est mal compris ? D'après ton dernier schema tu as une relation Element Page qui est du One to One donc la première ligne de code que je t'ai envoyé devrait suffire

    Sinon, Symfony étant très ... "magique" ça fait pas de mal de temps en temps aller jeter un œil dans les méthodes de ta classe baseXXX que tu devrais trouver dans lib/model/base/BaseElement.class.php ou BasePage.class.php, selon ton IDE, tu auras peut-etre besoin de dérouler les commentaires de haut de page pour voir apparaitre tes méthodes magiques (tous tes accesseurs), et donc savoir ce que tu es en mesure de faire avec ton objet (je dis ça notamment pour les surcharges de widget etc).

  10. #10
    Membre averti
    Homme Profil pro
    Développeur Web Etudiant
    Inscrit en
    Avril 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web Etudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 34
    Par défaut
    Question avant de regénéré model filtre et form :

    Si je fait sa sans modifier la bdd coté phpmyadmin, sa devrai passé ?

  11. #11
    Membre Expert Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    Comment ça sans modifier la BDD ?

    Si tu changes ton schema sans faire un rebuild de ton modèle ça ne changera rien du tout.

    Dans l'ordre tu sauvegarde ton nouveau schema, build, si tu as des fixtures tu fais un load-data et tu testes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [1.x] Admin generator et jointure ?
    Par symfony30000 dans le forum Symfony
    Réponses: 13
    Dernier message: 07/12/2012, 15h25
  2. [1.x] Admin generator & jointure
    Par Onime Records dans le forum Symfony
    Réponses: 3
    Dernier message: 02/10/2009, 16h53
  3. [1.x] Admin generator - images administrables
    Par wadzat dans le forum Symfony
    Réponses: 3
    Dernier message: 30/05/2008, 15h39
  4. Réponses: 7
    Dernier message: 25/05/2008, 17h06
  5. [1.x] Champs i18n disabled par l'admin generator
    Par wadzat dans le forum Symfony
    Réponses: 1
    Dernier message: 22/05/2008, 14h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo