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 :

setId inutile ? [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 15
    Points : 14
    Points
    14
    Par défaut setId inutile ?
    Bonjour,

    j'ai une application dans laquelle je doit "setter" mon id

    J'ai donc fait un jolie

    et derriére un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo $object->getId();
    jusque là tous va bien.

    Mais quand je regarde en BDD, je vois que l'id n'est plus du tout celui que j'ai setter ,il prend l’incrément auto

    Alors oui, c'est normal c'est un incrément auto alors il s'incèremente automatiquement. Mais dans mon appli je veux / doit pouvoir setter l'id que je veux.

    J'ai regardé les logs, le insert into est dépourvu d'id

    dans mon entity j'ai définit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        /**
         * @ORM\Id
         * @ORM\GeneratedValue
         * @ORM\Column(type="integer")
         */
        private $id;
    peut-être une stratégie a rajouter? si oui laquelle ?

    Merci de votre aide

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    Question idiote mais... as-tu fait un persist / flush juste après le setId() ?
    Bah ouais fallait bien la poser cette question :p

    Sinon ca m'intrigue aussi ce problème...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    oui biensur l'object est bien enregistré en BDD avec les bonnes info sauf l'id

    Mais tu as raison fallait la poser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $em = $this->get("doctrine.orm.entity_manager");
            $em->persist($object);
            $em->flush();
    vous avez également le problème ?

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    Non je n'ai pas ce soucis, mais c'est le genre de petit problème qui peut arriver à tout moment, et finalement on met du temps à le résoudre...

    Il fait quoi exactement le "@ORM\GeneratedValue" ?

    De mon côté j'utilise toujours le YML, et je ne connais pas toutes les subtilités de Doctrine2.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    "Specifies which strategy is used for identifier generation for an instance variable which is annotated by @Id. This annotation is optional and only has meaning when used in conjunction with @Id.

    If this annotation is not specified with @Id the NONE strategy is used as default."

    en gros, c'est le auto incremente je pense.

    On peut lui assigner une "strategy" au choix :

    AUTO, SEQUENCE, TABLE, IDENTITY and NONE.

    par default c'est none qui est prit

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Février 2007
    Messages : 37
    Points : 36
    Points
    36
    Par défaut
    Hello,

    Pq mettre une strategy AUTO si c'est toi qui set l'id (dans tous les cas).
    None conviendrait mieux =>
    NONE: Tells Doctrine that the identifiers are assigned (and thus generated) by your code. The assignment must take place before a new entity is passed to EntityManager#persist. NONE is the same as leaving off the @GeneratedValue entirely.

    http://www.doctrine-project.org/docs...ion-strategies

    EDIT : Assure toi peut être qd même dans tes annotations que la valeur du champ id est unique

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    le NONE ne peut pas fonctionner dans ce cas car je ne SET pas toujours l'ID

    est-il possible de : à la fois SETTER et AUTO INCREMENTER la colonne id ?

    Merci de votre aide

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 146
    Points : 262
    Points
    262
    Par défaut
    Normalement quand tu est en auto incrément tu es pas trop sensé forcer des ID.

    Soit tes ID sont déja attribué et tu fait un get de l'ancien pour update, soit les lignes ne sont plus présente et tu veut juste combler des trous dans tes index.

    Si tu as un besoin fonctionnel de combler les trous c'est que ta façon de modéliser ta base n'est pas vraiment la bonne.

  9. #9
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 619
    Points : 188 594
    Points
    188 594
    Par défaut
    Citation Envoyé par jherbaux Voir le message
    est-il possible de : à la fois SETTER et AUTO INCREMENTER la colonne id ?
    Je vais faire plus court que Tolriq : ça n'a absolument aucun sens. Tu veux de l'automatique débrayé, en gros, ce qui est un gros problème de logique.

    Il fallait plutôt comprendre : parfois définir l'identifiant, d'autres fois laisser l'automatisme faire, sans besoin de remplir des trous (tu récupères des données d'une autre source, qui ont déjà un id qui ne peux pas bouger, puis tu dois en ajouter toi-même, notamment). Non ?
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Oui c'est exactement de cela qu'il est question.
    Les utilisateurs peuvent saisir du contenu ==> il f aut donc que que lauto increment fonctionne.
    Mais dans un second temps je dois pouvoir "récupérer" du contenu venant d'une autre appli.

    Garder mon id est indispensable car mes contenu sont "lié" entre eux.

    Quelqu'un a une idée?

    Merci

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 146
    Points : 262
    Points
    262
    Par défaut
    Ce sont 2 besoins différents donc un id auto incrément dans une table ne peut correspondre.

    Surtout que je suppose que dans ton autre appli tu as aussi une table en auto increment.

    Comment peut tu garantir une unicité de ces valeurs c'est impossible et cela ne peut donc pas être ta clef primaire.

    Tu as plusieurs solutions en fonction de si chacune de tes 2 applis fonctionnent sur le même serveur ou pas.

    Dans l'absolu en partant du pire des postulats, je partirait sur un web service commun aux 2 applis avec une table référent pour ces id et un moyen pour chacune des 2 appli de venir demander un id et de se referencer comme détenteur de l id pour faciliter ensuite la recup d'information en fonction du serveur contenant la donnée.

    Une autre solution : une seule des 2 tables est maitre et a les id en auto incrément, tu rajoute un champs pour définir que ce n'est pas l'appli locale qui a les données et dans l'autre appli tu ne gère pas tes auto incrément tu creer dans l'autre appli une entrée que tu déclare non locale et après tu insère en local avec l'id qui t'a été donné par l'autre table.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Merci de votre aide, je vais continuer a regarder si il n'y a pas une solution, sinon j'opterai pour

    Une autre solution : une seule des 2 tables est maitre et a les id en auto incrément, tu rajoute un champs pour définir que ce n'est pas l'appli locale qui a les données et dans l'autre appli tu ne gère pas tes auto incrément tu creer dans l'autre appli une entrée que tu déclare non locale et après tu insère en local avec l'id qui t'a été donné par l'autre table.

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

Discussions similaires

  1. [tomcat] bcp de choses inutiles au démarrage du serveur
    Par iubito dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 23/06/2004, 20h10
  2. [ Code ] Analyse de code - Attribut Inutile
    Par geegee dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 19/05/2004, 09h07
  3. [LG]elimination d'espace inutile
    Par mister_dsg dans le forum Langage
    Réponses: 3
    Dernier message: 14/12/2003, 11h47
  4. Réponses: 2
    Dernier message: 03/12/2002, 11h42

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