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 :

Remove from huge doctrine collection [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut Remove from huge doctrine collection
    Bonjour à tous,

    J'ai deux entités liées par une relation ManyToMany. Disons des catégories et des users.
    Certaines de mes catégories contiennent énormément de users (10000 voire potentiellement plus).

    Lorsque je charge une catégorie, je ne peux pas inclure la collection toute entière : trop lourd, impossible de tout charger.
    Donc je suis passé par plusieurs moyens détournés pour compter le nombre de users dans une catégorie, vérifier si un user fait partie d'une catégorie etc.

    Par contre, la suppression d'un user de cette catégorie pose problème car Doctrine tient à initialiser toute la collection pour pouvoir faire la diff de la collection et persister correctement les changements.

    Quelle solution me permettrait de supprimer un user de ma catégorie sans charger la collection complète dans mon objet catégorie ?

    J'exclus d'office les deux solutions suivantes :
    • Faire une entité correspondant à ma table intermédiaire.
    • Changer l'appartenance de la relation ManyToMany pour pouvoir supprimer depuis la collection de catégorie dand user.



    Solution hasardeuse envisagée pour le moment : une requête native qui tape directement dans la table intermédiaire.

    Qui dit mieux ?

    Merci ++

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    Je penche aussi pour la requête native

  3. #3
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    EXTRA_LAZY => problème résolu.

    Je pensais que ce n'était valable que pour les méthodes count() et ce genre de petites choses, mais il semblerait que ça fonctionne aussi pour ne pas initialiser toute la collection lors d'un remove.
    Une option bien pratique qui va me résoudre bien des problèmes. Un peu léger niveau documentation par contre :/

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

Discussions similaires

  1. [Doctrine] getEmail me retourne une doctrine collection et pas un string
    Par jfsenechal dans le forum ORM
    Réponses: 2
    Dernier message: 06/12/2010, 16h02
  2. CVS : "Remove from view" définitif
    Par Neilime05 dans le forum Eclipse
    Réponses: 11
    Dernier message: 27/10/2010, 11h25
  3. References VBA: remove from GUID
    Par ludooo dans le forum VBA Access
    Réponses: 4
    Dernier message: 25/02/2009, 12h05
  4. Réponses: 5
    Dernier message: 29/11/2007, 01h58
  5. from string to collection
    Par anasshb dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 01/11/2007, 13h53

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