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

PHP & Base de données Discussion :

[Doctrine] Update and Delete en meme temps


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2008
    Messages : 101
    Points : 72
    Points
    72
    Par défaut [Doctrine] Update and Delete en meme temps
    Bonjour

    En utilisant l'exenple du manuel de Doctrine (User and Phonenumber), je voudrais mettre a jour des attributs de User et supprimer un telephone en meme temps (Cette contrainte et obligatoire pour moi car j'utilise une classe UserDao avec une methode update($user) qui doit mettre a jour tout les attribut de user, supprimer les telefones detache du nouvelle objet et ajouter les nouveaux telefones,....)

    Considerons maintenant ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $u = Doctrine_Query::create()->from('User')->where('id = ?',1)->fetchOne();
    $u->name = 'new name';
    $u->Phonenumbers[0]->delete();
    $u->save();
    Ce code marche!! j'ai name qui est mis a jour, phonenumber qui est supprimer MAIS l'appel a $u->save() rajoute un nouveau phonenumber avec des attributs egaux a NULL .

    Est ce que quelqu'un vois comment je peut resoudre ce probleme?

    P.S: Desole pour l'orthographe mais j'utilise un clavier QWERTY.

    Merci

  2. #2
    Membre averti Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 384
    Points
    384
    Par défaut
    Bonjour,

    As-tu essayé de placer le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $u->Phonenumbers[0]->delete();
    après le save ?

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2008
    Messages : 101
    Points : 72
    Points
    72
    Par défaut
    Salut

    Bon, apres plusieurs recherches hier, j'ai put trouver une solution a mon problem. En effet, il suffit d'appeler la methode refreshRelated() qui va mettre a jour toutes les relations de l'objet parent. Pour mettre a jour une seules relation, il suffit de passer en argument l'alias de la relation a mettre a jour.

    Le code doit resembler a cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $u = Doctrine_Query::create()->from('User')->where('id = ?',1)->fetchOne();
    $u->name = 'new name';
    $u->Phonenumbers[0]->delete();
    $u->refreshRelated('Phonenumbers');
    $u->save();
    Tout se passe bien pour les relations One-to-Many. Cependant pour les relations One-to-One, cela se passe moins bien. Pour bien comprendre le resultat, considerons cet exemple: un User peut avoir un seul Email et vise versa. Maintenant je reprend le meme code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $u = Doctrine_Query::create()->from('User')->where('id = ?',1)->fetchOne();
    $u->name = 'new name';
    $u->email->delete();
    $u->refreshRelated('email');
    $u->save();
    Ce bout de code ne va pas supprimer l'enregistrement de la bdd, mais il va seulement assigner NULL a tout les champs de la table Email, sauf pour PK et FK.
    Voila mon probleme et presque regler, mais il me reste a trouver la solution pour ce deuxieme cas a savoir comment supprimer l'enregistrement de la bdd ou plutot comment assigner NULL a $u->email!

    Est ce que quelqu'un voit comment je peut resoudre ceci.

    P.S: Desole pour l'orthographe mais j'utilise un clavier QWERTY.

    Cordialement

Discussions similaires

  1. [AC-2003] Update and delete
    Par jibe84 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 06/08/2009, 15h01
  2. Impossible de generer insert, update and delete sqldatasource
    Par samiblh dans le forum Accès aux données
    Réponses: 0
    Dernier message: 20/05/2009, 00h16
  3. lancer plusieur update en meme temps
    Par ApprentiDeveloppeur dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/03/2009, 21h35
  4. lancer plusieur update en meme temps
    Par Nacera dans le forum Toad
    Réponses: 2
    Dernier message: 25/10/2007, 16h28
  5. [MS SQL]faire un UPDATE sur plusieurs tables en meme temps
    Par touille dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/07/2007, 09h45

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