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 - mysql]enregistrement en boucle [1.x]


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 7
    Points : 6
    Points
    6
    Par défaut [save - mysql]enregistrement en boucle
    Bonjour la communauté!

    Je développe ma première application sous symfony depuis 2 mois maintenant et je rencontre un problème pour lequel votre aide m'aidera surement.

    lorsqu'un utilisateur me soumet un formulaire, j'aimerais pouvoir enregistrer plusieurs lignes dans un tableau à partir d'une même fonction. Pour cela, je déclare un nouvel objet et j'utilise la fonction save après avoir affecté des valeurs aux attributs de l'objet

    mon problème vient de l'action save, qui m'indique qu'il y a une violation au niveau de la clé primaire (auto incrémentale)

    voici mon cas d'utilisation pour être plus clair :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public function maFonction ($arrayData)
    {
     foreach($arrayData as data)
      {
        $monObjet = new MonObjet() ;
        $monObjet->setAttribut1($data['attribut1'] ;
        // ...
        $monObjet->setAttribut2($data['attribut2'] ;
        $monObjet->save() ;
      }
    }
    Le premier save() est correctement réalisé, mais ensuite le debugger m'annonce une violation au niveau de la clé primaire.
    Il faut savoir que je déclare un objet (MonObjet) qui est en réalité l'objet possédant la fonction appelée (maFonction).

    J'ai du louper quelque chose, je pense que la requête exécutée en fin ne prend pas en compte l'auto incrémentation mais affecte à ma clé toujours la même valeur.

    J'espère que je n'ai pas été trop brouillon dans l'explication, et j'attends avec impatience votre aide.

    Rainiou

  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
    As-tu essayé de supprimé l'objet à la fin de la boucle ?

    $monObjet = null;
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci pour votre aide,

    j'ai essaye $monObjet = null, sans succès.

    En regardant de plus près le "stack trace", j'ai pu consulter la requête que Doctrine réalise. Étant donne que mon problème vient de ma clé primaire, j'ai essaye d'ajouter ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $monObjet->setMacle('') ;
    j'espérais que la requête allait bien attribuer la valeur vide a ma clé primaire pour que MySQL incrémente cette valeur de lui même, mais Doctrine continue d'attribuer a ma clé primaire, la première valeur insérée.

    [edit]
    si je réalise une insertion d'une seule ligne, j'ai le même soucis... en gros c'est comme si ma clé n'était pas auto incrémentée. Lorsque je regarde la structure de ma table, le champ possède bien l'attribut autoincrement

    dans ma config mon champ est défini ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     object_id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
    [/edit]

    rainiou

  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
    Peut-être un problème dans la base ?

    Essaye de régénérer la base avec un build --all
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Toujours le même problème. Je pense réellement ne pas avoir saisi un concept sur ma déclaration de table ou l'utilisation de mon objet pour une sauvegarde car j'ai bien un pb d'auto incrémentation...

    Je pense a un truc, qui peut être est complètement a cote de la plaque, mais mes relations avec des clés étrangères et leurs cardinalites peuvent-elle m'empêcher de créer un doublon?
    --> visiblement non (en comparant ma structure sur une autre table quasiment identique)

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    trouve!

    merci pour l'aide mimi, on cherche toujours trop complique! il s'agissait bien d'un pb d'identifiant! J'ai confondu une affectation d'identifiant :

    je donnais a l'identifiant clé, une valeur de clé étrangère, du coup... ca ne pouvais fonctionner...

    Merci encore pour le temps consacre!

    rainiou

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

Discussions similaires

  1. [Toutes versions] Si plusieurs enregistrements sur boucle
    Par AidezMoiSvp dans le forum VBA Access
    Réponses: 6
    Dernier message: 04/10/2013, 08h54
  2. Unable to save MySQL query result
    Par JCD21 dans le forum Langage
    Réponses: 1
    Dernier message: 14/02/2011, 12h31
  3. [MySQL] Enregistrer un profil "user" et un rôle
    Par whitespirit dans le forum Zend_Db
    Réponses: 4
    Dernier message: 31/05/2010, 17h10
  4. Enregistrement en boucle
    Par Pwouaro dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/01/2008, 11h26
  5. [SGBD] [PHP/MySQL] Problème de boucles
    Par projetM dans le forum Requêtes
    Réponses: 5
    Dernier message: 24/05/2006, 18h11

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