Bonjour,

Je viens vers vous car j'ai un soucis avec une de mes requetes, je n'arrive pas tout a fait a faire ce que je veut :s

En fait je cherche a lister des produits qui sont dans une sous-catégorie (qui appartient a une catégorie), et qui sont proposer par des vendeur

J'ai 5 entité:

une avec les produits

une avec les catégories

une avec les sous-catégorie

une avec les vendeurs

et une qui match les produits detenu par les vendeurs

L'objectif est de partir d'une catégorie et de récupéré les sous-catégorie liée, avec les produits détenu par un vendeur défini.

J'ai fait une requete qui fonctionne est me donne exactement ce que je veut :

On est dans le repository SousCat, $id correspond a l'id de la category, $vendeur correspond l'id du vendeur

public function findSouscatForCategory($id,$vendeur)
{

$qb = $this->createQueryBuilder('a')
            ->leftJoin('a.category', 'd')
            ->leftJoin('a.products', 'p')
            ->leftJoin('p.store', 's')
            ->addSelect('d')
            ->addSelect('p')
            ->addSelect('s')
            ->where('a.category = :id')
            ->setParameter('id', $id)
            ->andWhere('s.vendeur = :vendeur')
            ->setParameter('vendeur', $vendeur)
            ;

    return $qb->getQuery()->getResult();

}

Cette requete me donne tout ce que je veut, ces a dire tous les produits pour un vendeur donner et une categorie donnée rangé par sous-categorie.

Mais le probléme que je rencontre, ces quand il n'y a pas d'article qui matche avec le vendeur... quand ces le cas sa me retourne un résultat vide, ce qui est normal... mais j'aurais voulu quand meme pouvoir lister les sous-catgorie en mettant un message comme quoi aucun produit n'a été trouver, mais vu que ma requete me renvois un tableau vide, je n'est meme pas accés au sous-catégorie :s

De la meme facon, si il n'y a pas de produit dans certaine sous-categorie d'une catégorie, les sous-catégories avec produit s'affiche bien, par contre celle qui n'ont pas de produit trouvé ne s'affiche du coup pas du tous :s

Vous aurez comprit que meme si sa marche ce n'est pas le comportement que je recherche, je voudrait que meme si un vendeur n'a aucun produit dans une sous-catégorie la catégorie s'affiche, et la j'ajouterais un message comme quoi il n'y a pas de produits.

En fait je voudrais que si le:

->andWhere('s.vendeur = :vendeur')

ne retourne aucun resultat, je puisse avoir quand meme le reste des donnée recupéré, et un tableau vide pour les produits.

Je cherche depuis un moment comment faire, mais je ne trouve rien de concluant, j'espere que vous arriverez a me mettre sur la piste, je suis sur que sa ne doit pas etre bien compliquer, mais la je n'arrive plus a y voir clair :s

J'espere que vous aurez comprit mon soucis et que vous pourrez me donner un coup de pouce :)

Merci d'avance :)

2 réponses


Bonjour.
Il te faut le faire en plusieurs requêtes, la première comme tu l'as fait, une seconde dans le cas ou la première ne te retourne rien, dans laquelle tu récupères les sous-catégories, etc.

rif152
Auteur

Merci pour ta reponse ;)
Alors j'ai déja essayer ta proposition, c'est meme la premiére chose que j'ai faite :) mais le probléme que j'ai rencontrer ces que la methode me récupére bien les sous-catégorie, mais elle me récupére egalement tous les produits des sous-catégories , vu que les tables sont liée du coup , au lieu d'avoir aucun produits je me retrouve avec tous les produits de la sous-catégorie, et je n'est pas reussi a exlure mon attribut products de la requete :s

J'ai réussie a aboutir a un résultat, mais ma facons de faire me semble un peu farfelu et je pense qu'il doit y a voir plus simple, un avis?
j'utilise la methode suivante pour recuperer les sous-catégorie liée a la catégorie

$sousCat= $this->getDoctrine()
->getRepository('AppBundle:SousCat')
->findByCategory($id);
$test = Array();
foreach($sousCat as $cat)   {
$product = $this->listAction($cat->getId(),$vendeur);
$new = Array('product' => $product,'sousCat' => $cat);
array_push($test, $new);
}

ma mehode listAction() recupere les produits pour une sous-categorie et pour un vendeur donnée:

public function listAction($id) {

        $qb1 = $this->createQueryBuilder('p')
                ->leftJoin('p.sousCat', 'a')
                ->leftJoin('p.vendeur', 'v')   
                ->addSelect('a')
                ->addSelect('v')
                ->where('a.id = :souscat')   
                ->andWhere('v.vendeur = :vendeur')
                ->setParameter('souscat',$id)
                ->setParameter('vendeur',$vendeur)
                ;
            $rep1 = $qb1->getQuery()->getResult();
        return $rep1;
    }

En fait a partir des 2 requetes je recupere les résultats qu'il me faut et ensuite je les lie dans un tableau que je passe a la fin a ma vue, alors sa fonctionne, mais sa ne me parrait pas génial comme facons de faire, vous avez ou des suggestions pour améliorer cela?

Et par ailleurs une question complementaire, mon principe et de rechercher les produits pour une sous-categorie et un vendeur donner, y a t'il des limitations si on a enormement de produit ou de vendeur?
Par exemple est ce que sa fonctionnera correctement si on a des millions de produits et des milliers de vendeur?

Merci a vous :)