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

ORM PHP Discussion :

[AdminGenerator] affichage dans filtres et champs du backend


Sujet :

ORM PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Par défaut [AdminGenerator] affichage dans filtres et champs du backend
    Bonjour à tous,

    Mon site avance bien mais j'ai encore quelques soucis.
    A savoir que j'ai généré un module d'administration dans mon backend permettant d'ajouter, editer, supprimer des objets du catalogue.

    J'ai un petit problème dans mes champs qui ont une relation sur mon schema.yml! En effet, par exemple pour le champs index_marque il m'affiche un select qui a pour option les champs descriptions de ma table marque. J'ai modifié pour qu'au lieu d'afficher la description, il m'affiche le nom de la marque à l'aide de la fonction __toString.

    Cependant pour le champs index gamme j'ai un champs input texte. Je souhaiterais avoir un select avec les options correspondant à ma gamme

    Pour mieux vous éclairer, voici un apercu de mon schema.yml:
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    Catalogue:
      connection: doctrine
      tableName: catalogue
      actAs:
        Commentable:
      columns:
        id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        index_famille:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: false
          default: '0'
          notnull: true
          autoincrement: false
        designation:
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        index_marque:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: false
          default: '0'
          notnull: true
          autoincrement: false
      relations:
        JointuresGammes:
          local: id
          foreign: index_catalogue
          type: many
     
    Gammes:
      connection: doctrine
      tableName: gammes
      columns:
        id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        intitule:
          type: string()
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        description:
          type: string()
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
      relations:
        JointuresGammes:
          local: id
          foreign: index_gamme
          type: many
     
    JointuresGammes:
      connection: doctrine
      tableName: jointures_gammes
      columns:
        index_catalogue:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: false
        index_gamme:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: false
      relations:
        Catalogue:
          local: index_catalogue
          foreign: id
          type: one
        Gammes:
          local: index_gamme
          foreign: id
          type: one
    Par exemple j'aimerai avoir dans les options le champs intitule de ma table gammes.
    Est-ce faisable?
    Si oui comment: _toString sur quelle table??

    Merci

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Ton shema ne correspond à aucune des normes recommandées par symfony pour un shema doctrine (majuscule, "s" intempestif, relation a redéfinir, nom des champs de liaison, option par défaut à supprimer,...).

    Commence par le nettoyer et le compléter.

    A priori, tu as une liaison n-n entre catalogue et gammes mais elle n'est pas définie suivant les normes doctrine.

    Une fois ton shema.yml correctement mis en place et généré, tu ne devrais plus avoir de problèmes pour générer ce que tu veux.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Par défaut
    Citation Envoyé par Michel Rotta Voir le message
    Ton shema ne correspond à aucune des normes recommandées par symfony pour un shema doctrine (majuscule, "s" intempestif, relation a redéfinir, nom des champs de liaison, option par défaut à supprimer,...).
    J'ai construit mon schema en m'aidant du tuto Jobeet de Symfony:
    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
    JobeetJob:
      actAs: { Timestampable: ~ }
      columns:
        category_id:  { type: integer, notnull: true }
        type:         { type: string(255) }
        company:      { type: string(255), notnull: true }
        logo:         { type: string(255) }
        url:          { type: string(255) }
        position:     { type: string(255), notnull: true }
        location:     { type: string(255), notnull: true }
        description:  { type: string(4000), notnull: true }
        how_to_apply: { type: string(4000), notnull: true }
        token:        { type: string(255), notnull: true, unique: true }
        is_public:    { type: boolean, notnull: true, default: 1 }
        is_activated: { type: boolean, notnull: true, default: 0 }
        email:        { type: string(255), notnull: true }
        expires_at:   { type: timestamp, notnull: true }
      relations:
        JobeetCategory: { onDelete: CASCADE, local: category_id, foreign: id, foreignAlias: JobeetJobs }
    Il y a bien une majuscule pour le nom du model, des champs qui contiennent une option default.
    En ce qui concerne le nom des champs de liaison, je ne peux pas les modifier puisque dans mon cahier des charge on m'a clairement signifié que je devais m'appuyer sur une base de données déjà existante et ne pas en modifier les champs.
    Je peux effectivement supprimer des "s" intempestifs et redefinir d'une meilleure manière les relations. Je pensais pourtant qu'elles étaient bonnes. Comment puis-je les arranger??

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Avec un peu de rechercher tu aurais trouvé plusieurs articles où j'en parle, je t'invite à le faire pour comprendre les modifications que je te suggère ici.

    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
     
    catalogue:
      actAs:
        Commentable:
      columns:
        famille_id:  #pas défini ici...
          type: integer
          default: '0'
          notnull: true
        designation:  string(255)
        marque_id: #pas défini ici
          type: integer
          default: '0'
          notnull: true
      relations:
        gammes:
          class: gamme
          refClass: JointuresGamme
          foreignAlias: catalogues
     
    gamme:
      columns:
        intitule:   string()
        description:     string()
     
    jointuresGamme:
      connection: doctrine
      tableName: jointures_gammes
      columns:
        catalogue_id:
          type: integer
          primary: true
        gamme_id:
          type: integer
          primary: true
      relations:
        Catalogue:
          foreignAlias: jointuresGammes
        Gamme:
          foreignAlias: jointuresGammes
    Pas testé, vu qu'il manque des tables dans ton exemple.

    En s'inspirant de cela et de ce que tu vas trouver avec chercher, tu devrais pouvoir corriger le reste.

    Poste le tous si tu veux une relecture. (dans la soirée, pas avant)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Par défaut
    Merci Michel. J'aimerai cependant avoir quelques éclaircicements:
    • dans ce que tu me proposes, tu ne définis pas le local et foreign je suppose que je dois garder quand même ceux que j'ai mis??
    • concernant ce qu'il faut mettre pour les relations:prenons un exemple :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      groupsGammes: # (1)
            class: # (2)
            local: # (3)
            foreign: # (4)
            refClass: # (5)
            foreignAlias: # (6)
      (1): ceci est le "titre" de ma relation
      (2): ceci est mon moyen d'appeler ma relation. Par exemple si j'ai class: lambda je dois faire getLambda()->...
      (3): ceci est le champs sur lequel porte la relation dans ma table où cette relation est définie
      (4): ceci est le champs sur lequel porte ma relation sur la table étrangère
      (5): ceci est la class de ma deuxieme table liée
      (6): ceci est l'alias me permettant d'utiliser ma relation depuis ma seconde table


    Est-on d'accord sur les termes, afin que j'épure mon fichier schema.yml??

  6. #6
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Citation Envoyé par babyboy6492 Voir le message
    concernant ce qu'il faut mettre pour les relations:prenons un exemple :
    • (1) C'est le nom de la relation vu du côté de la table où elle est définie. C'est donc, généralement le nom de l'autre table.
    • (2)(défaut : le nom de la relation) c'est le nom de la classe (nom de la table) qui doit être lié. A n'utiliser que si (1) est différent du nom de la classe (nom de la table)
    • (3)(defaut : id) c'est le nom du champ de la table source à utiliser, si le champ est id, il n'est pas utile de le mettre.
    • (4)(defaut : <nomDeLaRelation>_id ) c'est le nom du champ de l'autre côté de la relation, si le champ est nommé correctement, il n'est pas utile de le mettre.
    • (5)(defaut : null ) ne s'utilise QUE pour la mise en place d'un lien n-n utilisant d'une manière transparente la table de liaison. Ne s'utilise jamais dans une relation 1-n ou 1-1.
    • (6)C'est le nom de la relation vu depuis l'autre table l'inverse de (1). Généralement, pour une relation 1-n correctement définie, c'est un nom au pluriel, pour indiquer qu'il retourne un doctrine_collection.


    Je suis d'accord avec mes termes

    Toujours construire la relation depuis le côté n de la relation 1-n

    Ne pas renseigner les données par défaut pour ne pas surcharger le schema (c'est surtout pour la lisibilité, doctrine, lui, s'en fout).

    Il existe d'autres paramètres, moins utilisé, dans les relations, il faudrait vraiment que je fasse un billet là dessus.

    Ne jamais définir une relation sur les deux côtés de la relation, au risque d'avoir un truc qui ne marche absolument pas.

Discussions similaires

  1. Left join, champ null et affichage dans etat
    Par catoucat dans le forum Access
    Réponses: 3
    Dernier message: 03/07/2006, 02h58
  2. [Tableaux] affichage dans un champ est tronqué
    Par harlock59 dans le forum Langage
    Réponses: 4
    Dernier message: 21/02/2006, 21h39
  3. [JTextField] Problème d'affichage dans un champ ...
    Par mitje dans le forum Composants
    Réponses: 2
    Dernier message: 01/02/2006, 15h41
  4. Verifier un champ a l affichage dans un etat
    Par virtuose dans le forum Access
    Réponses: 5
    Dernier message: 19/01/2006, 18h18
  5. Réponses: 9
    Dernier message: 09/01/2006, 12h10

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