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] 1.2 Sous-requêtes


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2007
    Messages : 186
    Par défaut [Doctrine] 1.2 Sous-requêtes
    Bonjour a tous !
    Je vient vers vous dans l'espoir d'éclaircir un peu la question des requêtes imbriqués (si c'est bien le nom que ça porte) avec Doctrine 1.2. J'ai du mal a trouver de la documentation pour écrire ce genre de requêtes plus proprement avec Doctrine:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $q = Doctrine_Query::create()
      ->from('User u')
      ->where('u.id NOT IN (SELECT u.id FROM User u2 WHERE u.login= ?)', 'toto');
    $users = $q->fetchArray();
    Peut-être que cela a peu d'incidence, mais dés lors que nous somme dans une sous-requête nous n'utilison plus les méthodes ->where() par exemple.

    Une idée ?

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    Je ne connais pas les subtilités de la 1.2, ayant commencé à la 1.4.

    Mais en 1.4, il n'y a pas d'autre possibilité que la tienne, je suppose qu'il n'en existe pas d'autre non plus dans la version précédente.

    La version 2.0 change tellement la manière de créer les requêtes qu'il va falloir attendre pour voir.

  3. #3
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2007
    Messages : 186
    Par défaut
    Ok, c'est ce que je commençais a me dire en fouillant sur les moteurs de recherche :p
    Nous verrons bien avec Doctrine 2 alors =)
    Merci en tout cas

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    elle est bizarre ta requête non ?

    c'est quoi la différence avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $q = Doctrine_Query::create()
      ->from('User u')
      ->where('u.login != ?', 'toto');
    $users = $q->fetchArray();

  5. #5
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2007
    Messages : 186
    Par défaut
    C'est une requête d'exemple, pour exposer le type de requête dont je parlais

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    je me disais aussi
    y'a d'autre moyen de faire la requete :

    dixit la doc : http://www.symfony-project.org/doctr...king-With-Data

    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
    Using subqueries in your WHERE
     
    // Find users not in group named Group 2
    $q = Doctrine_Query::create()
      ->from('User u')
      ->where('u.id NOT IN (SELECT u.id FROM User u2 INNER JOIN u2.Groups g WHERE g.name = ?)', 'Group 2');
     
    $users = $q->fetchArray();
     
    // You can accomplish this without subqueries like the 2 below
    // This is similar as above
    $q = Doctrine_Query::create()
      ->from('User u')
      ->innerJoin('u.Groups g WITH g.name != ?', 'Group 2')
     
    $users = $q->fetchArray();
     
    // or this
    $q = Doctrine_Query::create()
      ->from('User u')
      ->leftJoin('u.Groups g')
      ->where('g.name != ?', 'Group 2');
     
    $users = $q->fetchArray();

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

Discussions similaires

  1. [3.x] Lenteur de doctrine via des sous-requêtes
    Par croftman dans le forum Doctrine2
    Réponses: 0
    Dernier message: 01/08/2017, 09h19
  2. [Doctrine] DQL et sous-requête
    Par Auden dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 22/06/2013, 21h10
  3. Réponses: 2
    Dernier message: 24/03/2011, 18h10
  4. suppression avec sous requête conditionnelle
    Par melmel dans le forum Requêtes
    Réponses: 8
    Dernier message: 18/03/2004, 23h20
  5. Réponses: 3
    Dernier message: 18/05/2003, 00h16

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