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 :

save() impossible sur une table en relation n:n [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Points : 142
    Points
    142
    Par défaut save() impossible sur une table en relation n:n
    Ma Table ressources contient toutes les ressources de mon site, et pour permettre aux utilisateurs de les mettre en favoris (sur le site), la table ressource est en relation n:n avec la table membre avec pour intermédiaire la table favoris. 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
     
    membre: 
     columns: 
      username: 
       type: string(255)
       notnull: true
       unique: true
      password: 
       type: string(255)
       notnull: true
     relations:
      ressource:
          local: ressource_id
          foreign: membre_id
          refClass: favoris
          onDelete: cascade
     
    ressources:
      columns:
        ...
        titre:
          type: string(255)
        nature:
          type: enum
          values: ['1','2']
      relations:
        membre:
          local: membre_id
          foreign: ressource_id
          refClass: favoris
          onDelete: cascade
     
    favoris:
     columns:
      ressource_id:
       type: integer
       primary: true
      membre_id:
       type: integer
       primary: true
    Ainsi sous, l'affichage de la page d'une emission, je place ce lien
    <a href="<?php echo url_for('emission/mettreEnFavoris?emission='.$emission->getId()) ?>">Mettre en favoris</a>
    Le code de mon action mettreEnFavoris 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
     
      public function executeMettreEnFavoris(sfWebRequest $request)
      {
        $this->forward404Unless($request->getParameter('emission'));
     
    	$fav = new favoris();
     
    	$this->res = Doctrine::getTable('ressources')->findOneByEmissionId($request->getParameter('emission'));
     
    	$this->resId = $this->res->getId();
     
    	$fav->setRessourceId($this->resId);
    	$fav->setMembreId(1);
    	$fav->save();			
      }
    (NB: Je ne l'ai pas mis ici mais la table ressource est en relation avec d'autres tables emission et article.)
    Et quand cette action est appelée, il renvoie l'erreur que voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`nortb`.`favoris`, CONSTRAINT `favoris_ressource_id_sf_guard_user_id` FOREIGN KEY (`ressource_id`) REFERENCES `sf_guard_user` (`id`))
    (Ouais, la table membre aussi hérite de sfGuardUser par aggrégation de colonne)
    Alors, quelques idées pour enregistrer les éléments dans ma table favoris ? Merci de votre aide.

  2. #2
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    Points : 8 486
    Points
    8 486
    Par défaut
    Le shema.yml corrigé

    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
     
    membre: 
     columns: 
      username: 
       type: string(255)
       notnull: true
       unique: true
      password: 
       type: string(255)
       notnull: true
     relations:
      ressources:
          class: ressource
          refClass: favoris
          foreignAlias: membres
     
    ressource:
      columns:
        ...
        titre:
          type: string(255)
        nature:
          type: enum
          values: ['1','2']
     
    favori:
     columns:
      ressource_id:
       type: integer
       primary: true
      membre_id:
       type: integer
       primary: true 
      relations:
        membre:
          foreignAlias: favoris
          ondelete: cascade
        ressource:
          foreignAlias: favoris
          ondelete: cascade
    Voila à quoi devrait ressembler ton shéma.

    Réessaye avec ce fichier.
    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 !

  3. #3
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Points : 142
    Points
    142
    Par défaut
    Ca a marché waou waou, merci, ca a marché. Ca a renvoyé l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The template "mettreEnFavorisSuccess.php" does not exist or is unreadable in
    Mais c'est pas un problème. Je ne veux pas de template. Je vais juste faire un redirect avec un setFlash.
    Mais dis, tu peux m'expliquer un peu comment tu as conçu le schéma ? Ca va me servir dans les autres cas où je rencontre le même problème.

  4. #4
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    Points : 8 486
    Points
    8 486
    Par défaut
    Je vais mettre des articles sur mon blog sur ce sujet, trop de demande pour le faire au coup par coup.

    Par contre, si tu recherches sur la salle des discutions sur "relation n-n" j'ai déjà largement bavé la dessus... Tu devrais y trouver ton bonheur.
    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 !

  5. #5
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Points : 142
    Points
    142
    Par défaut
    Ah oui ? Y a un salon ici ? C'est par où ?

    Et parlant de ton blog, merci en passant pour Ditto. En y faisant un tour il y a quelques jours, je l'ai remarqué et depuis, on est en parfaite harmonie.

  6. #6
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    Points : 8 486
    Points
    8 486
    Par défaut
    @etoileweb
    Cela ne te réussi pas de te lever tôt le matin !

    Il n'y a que toi qui évoque le mot "salon" dans cette discutions

    Je n'ai aucune idée de ce que tu veux dire par là...
    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 !

  7. #7
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Points : 142
    Points
    142
    Par défaut
    Bon, bon, bon, je dormirais mieux la prochaine fois. Je voulais parler de ta "salle des discussions"

  8. #8
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    Points : 8 486
    Points
    8 486
    Par défaut


    Une "salle de discutions", en terme de forum, c'est là où on discute d'un sujet précis.

    La salle symfony, est celle où l'on discute de tous ce qui tourne autour de symfony...
    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 !

  9. #9
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Points : 142
    Points
    142
    Par défaut
    Merci pour le cours. J'ai bien pigé. 20/20 au prochain devoir, promis prof

  10. #10
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Points : 142
    Points
    142
    Par défaut
    C'est toi qui choisis. Ce que nous voulons c'est toujours des tours de magie en symfony.

  11. #11
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    Points : 8 486
    Points
    8 486
    Par défaut
    Je sens que cela risque de finir en bordel, mais j'ouvre les suggestions...

    S'il y en a trop, j'en ferais un sujet à part
    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 !

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

Discussions similaires

  1. Mise à jour des statistiques Impossible sur une table volumineuse
    Par joujousagem2006 dans le forum Administration
    Réponses: 21
    Dernier message: 26/05/2014, 05h58
  2. Jointure sur une table de relation
    Par orion99 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 04/03/2014, 11h18
  3. Requête sur une table de relation 0,n - 0,n
    Par Jmdu_44fr dans le forum SQL
    Réponses: 4
    Dernier message: 22/09/2011, 16h28
  4. Requête impossible sur une table
    Par Nyaxou dans le forum Requêtes
    Réponses: 3
    Dernier message: 07/01/2011, 20h29
  5. [AC-2003] Requête UPDATE sur une table sans relation
    Par SIGER_971 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 09/07/2009, 09h02

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