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 :

Formulaire imbriqué Relation many to many [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 131
    Par défaut Formulaire imbriqué Relation many to many
    bonjour,
    Si vrai que le problème était posté plusieurs fois et résolu aussi plusieurs fois, il s'agit du formulaire imbriqué.
    En fait, j'ai utilisé une relation many to many avec CollectSell - Categorie et une table de relation CategorieCollectSell

    Mon schéma des trois tables est le suivant :
    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
     
    #############################
    ### Table Categorie
    #############################
    #= categorie
    Categorie:
      actAs: [Timestampable, SoftDelete]
      tableName: categorie
      columns:
        name:
          type: string(128)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
      relations:
        CollectSell:
          class: CollectSell 
          foreignAlias: Categorie 
          refClass:     CategorieCollectSell
          local:        categorie_id
          foreign:      id
    #############################
    ### Table CategorieCollectSell
    #############################
    #= categorie_collect_sell
    CategorieCollectSell:
      actAs: [Timestampable, SoftDelete]
      tableName: categorie_collect_sell
      columns:
        collectsell_id:
          type: integer
          primary: true
        categorie_id:
          type: integer
          primary: true
      relations: 
        CollectSell:
          class: CollectSell
          local: collectsell_id
          foreign: id
          foreignAlias: CategorieCollectSell
          onDelete: CASCADE
        Categorie: 
          foreignAlias: CategorieCollectSell
          onDelete: CASCADE
          class: Categorie
          local: categorie_id
          foreign: id 
    #############################
    ### Table CollectSells
    #############################
    #= collect_sell
    CollectSell:
      actAs: [Timestampable, SoftDelete]
      tableName: collect_sell
      columns:
        ........
    Dans mon formulaire de collectSellForm

    $this->setWidget('categorie_list', new sfWidgetFormDoctrineChoice(array('multiple' => true, 'expanded' => false, 'model' => 'categorie')));

    j'ai une erreur au moment d'ajout un noveau collectSell
    Unknown record property / related component "id" on "CategorieCollectSell"

    je comprends vraiment pas pourquoi , et je suis bloqué depuis hier .... je perds beaucoup de temps la dessus,

    Merci pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 131
    Par défaut
    quelqu'un a une idée ????

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Quelles sont les noms des colonnes de la table categorie_collect_sell dans la base ?

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 131
    Par défaut
    Tu as raison en me faisant penser à ça ...j'ai regardé la table, et je trouve que les clés étrangères sont bonnes, "collectsell_id" et "categorie_id", mais la table contenait pas d'id et pourtant dans mon schéma yml les id sont crés automatiquement.

    J'ai ajouté l'id manuellement dans le schéma yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CategorieCollectSell:
      actAs: [Timestampable, SoftDelete]
      tableName: categorie_collect_sell
      columns:
        id:
          type: integer(4), 
          primary: true, 
          autoincrement: true
    Maintenant quand je reviens pour ajouter un nouveau collectSell , j'ai l'erreur suivantes :

    SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`MyDba`.`categorie_collect_sell`, CONSTRAINT `categorie_collect_sell_collectsell_id_collect_sell_id` FOREIGN KEY (`collectsell_id`) REFERENCES `collect_sell` (`id`) ON DELETE CASCADE)

    j'ai l'impression qu'au moment d'insertion dans la table categorie_collect_sell, l'id de collectsell est introuvable, puisque c'est pas encore crée.

    Donc y a t-il un moyen pour crée en one Shot dans les deux tables?

    Merci d'avance

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    La définition même du foreign key est qu'un enregistrement dans la table mère doit exister avant l'insertion dans la table fille.
    Ne peux-tu pas insérer le collectCell, puis CategorieCollectSell ?

  6. #6
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    En principe tu devrais te contenter de la clé multiple initiale pour ta table d'association. Mais (question bête, je sais...) si tu veux ajouter une clé primaire à CategorieCollectSell, as-tu retiré les deux autres champs de la clé ?

  7. #7
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 131
    Par défaut
    @ Tsilefy , oui habituellement on ne peut pas insérer une ligne dans une table sans que la clé (id)soit crée. Comme je ne suis pas habitué avec les frameworks, je me disai que justement symfony crée en one shot d'abord la table mère puis la table de relation, puisque c'est cette dernière qui a besoin de l'id de la table mère.

    @herold , oui en effet au début je n'avais pas de clé primaire, ma clé primaire était les deux clés étrangère à la fois (categorie_id, collectsell_id), Mais comme ça ne marchai pas. je me suis dit il faut peut être un id, je l'ai crée et effectivement j'ai retiré les deux autres champs de la clé et je l'ai mis à notnull: true

    Maintenant, je ne sais pas si je dois traiter manuellement l'insertion, ou le fait que je déclare la relation, l'insertion devrait fonctionner.

    Merci d'avance.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/05/2012, 21h05
  2. [2.x] Formulaire imbriqué à relation multiple
    Par student_php dans le forum Symfony
    Réponses: 4
    Dernier message: 20/12/2011, 12h24
  3. Réponses: 5
    Dernier message: 12/08/2011, 08h59
  4. [MVC] Spring, formulaire, et relation one-to-many
    Par andlio dans le forum Spring Web
    Réponses: 1
    Dernier message: 21/06/2011, 09h39
  5. [1.x] formulaire imbriqué relation n:n table de jointure
    Par symfony30000 dans le forum Symfony
    Réponses: 15
    Dernier message: 27/04/2010, 14h12

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