2012-11-09 3 views
0

Je voudrais fusionner ces 2 demandes en 1 mais je n'ai aucune idée sur la façon de procéder. Une idée ?Doctrine: fusionner 2 demandes dans 1

$productsCount = Doctrine::getTable('Product') 
      ->createQuery('p') 
      ->where('p.store_id = ?', $store_id) 
      ->andWhere('p.collection = ?', $this->product->getCollection()) 
      ->andWhere('p.image_path IS NOT NULL') 
      ->count(); 

$productsCollection = Doctrine::getTable('Product') 
      ->createQuery('p') 
      ->where('p.store_id = ?', $store_id) 
      ->andWhere('p.collection = ?', $this->product->getCollection()) 
      ->andWhere('p.status_id = ?', Product::_ONLINE) 
      ->andWhere('p.id<>?', $this->product_id) 
      ->offset(rand(0, $productsCount - 1)) 
      ->execute(); 
  • Doctrine: 1.2
  • Symfony: 1.4
  • PHP: 5,3
+0

Que voulez-vous à la fin? Ces 2 requêtes renvoie des informations différentes, comment voulez-vous les fusionner? – j0k

+0

Les 2 requêtes utilisent la même table et la première est utilisée par la seconde donc j'ai pensé qu'il serait peut-être mieux de faire tout ça en une seule pour optimiser cela. Mais peut-être avais-je tort? – MaximeBernard

Répondre

1

Vous pouvez utiliser la sous-requête, parce que votre requête est pas identique. Voici DQL: Doctrine Query Language un exemple. Et voici pseudocode, je ne sais pas si cela va fonctionner à la fois. Vous obtenez un tableau dans $result. Faites var_dump() et vérifiez son contenu. Je ne suis pas sûr que ce code fonctionnera à la fois, mais je vous conseille d'aller dans cette direction.

p.s: Je vous recommande cette présentation intéressante sur l'optimisation Doctrine de la requête: Doctrine 1.2 Optimization

+0

Oh je vois! Vous devez donc injecter du SQL pur dans la requête Doctrine? J'ai pensé qu'il serait peut-être mieux optimisé pour demander des produits et compter en même temps. – MaximeBernard

+1

Une autre façon de le faire je ne sais pas.Cette méthode est décrite dans la documentation, et cela fonctionne, je pense que c'est mieux que de faire deux requêtes :-) – denys281

+0

Ne vous ouvrez-vous pas à une attaque par injection SQL lors de la création d'un requête comme ça? Les requêtes doivent être paramétrées. – oalbrecht