Bonjour,

Voila je rencontre un petit problème avec mon code.

J'essaie de filtrer mes utilisateurs par date début et date fin, mode de paiement zone de livraison(nom=stocke le nom de la zone de livraison) et nb Commandes, j'ai créé un form Type, une action une fonction dans le repository

class FilterClientsType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('dateDebut', DateType::class, array(
                'label'=>false,
                'widget' => 'single_text',
                'html5' => true,

            ))
            ->add('dateFin', DateType::class, array(
                'label'=>false,
                'widget' => 'single_text',
                'html5' => true,

            ))

            ->add('Filter', SubmitType::class, array(
                'attr' => array(
                    'class' => 'btn btn-primary',
                )
            ));
    }/**
 * {@inheritdoc}
 */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => null
        ));
    }

}

class UtilisateurController extends Controller
{

    public function listAction(Request $request)
    {
        $form = $this->createForm(FilterType::class);
        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            $dateDebut = $form->get('dateDebut')->getData();
            $dateFin = $form->get('dateFin')->getData();
            $modePaiement = $form->get('modePaiement')->getData();
            $nbCommande = $form->get('nbCommande')->getData();
            $zoneLivraison = $form->get('zoneLivraison')->getData();
        } else {
            $dateDebut = null;
            $dateFin = null;
            $modePaiement=null;
            $nbCommande=null;
            $zoneLivraison=null;
        }

        $userRepos = $this
            ->getDoctrine()
            ->getManager()
            ->getRepository('CeUtilisateurBundle:User');
            $listUsers = $userRepos->filterUser($dateDebut, $dateFin, $modePaiement, $nbCommande, $zoneLivraison);

             return $this->render('CeUtilisateurBundle:Utilisateur:list.html.twig', array(
            'form' => $form->createView(),
            'listUsers' => $listUsers,
        ));
    }

    class UserRepository extends \Doctrine\ORM\EntityRepository
{
    public function filterUser($dateDebut, $dateFin, $modePaiement, $nom, $nbCommandes)
    {
        $qb = $this
            ->createQueryBuilder('u')
            ->leftJoin('u.commandes', 'cmd')
            ->leftJoin('u.zoneLivraison', 'zone')
            ->addSelect('cmd')
            ->addSelect('zone')
            ->addSelect('COUNT(cmd.id) as nbCommandes');

        if (!is_null($dateDebut) && !is_null($dateFin) && $dateFin >= $dateDebut && !is_null($modePaiement) && !is_null($nom) && !is_null($nbCommandes)) {
            $qb->where('cmd.dateCommande BETWEEN :dateDebut AND :dateFin')
           ->andWhere ('cmd.modePaiement = :modePaiement')
           ->andWhere ('zone.nom = :nom')
            ->setParameter('dateDebut', $dateDebut)
            ->setParameter('dateFin', $dateFin)
            ->setParameter('modePaiement', $modePaiement)
            ->setParameter('nom', $nom)
            ->setParameter('nbCommandes', $nbCommandes);
        }
            return $qb
                ->getQuery()
                ->getResult();

    }

Je cherche à faire fonctionner ma requête car pour l'instant c'est ça qui bloque le problème est dans le nbCommandes qui n'existent pas dans la bdd donc je dois le calculer avec le compte de nombre de commandes de chaque utilisateur
Merci pour l'aide
Bonne journée

l'erreur est:

An exception occurred while executing 'SELECT COUNT(c0_.id) AS sclr0, f1.username AS username1, f1.username_canonical AS username_canonical2, f1.email AS email3, f1.email_canonical AS email_canonical4, f1.enabled AS enabled5, f1.salt AS salt6, f1.password AS password7, f1.last_login AS last_login8, f1.confirmation_token AS confirmation_token9, f1.password_requested_at AS password_requested_at10, f1.roles AS roles11, f1.id AS id12, f1.nom AS nom13, f1.prenom AS prenom14, f1.adresse_liv AS adresse_liv15, f1.ville_liv AS ville_liv16, f1.telephone AS telephone17, c0.id AS id18, c0.panier AS panier19, c0.dateCommande AS dateCommande20, c0.typeCommande AS typeCommande21, c0.adresseLiv AS adresseLiv22, c0.villeLiv AS villeLiv23, c0.modePaiement AS modePaiement24, c0.etat AS etat25, c0.infoComplementaire AS infoComplementaire26, z2.id AS id27, z2.nom AS nom28, z2.codePostal AS codePostal29, z2.frais AS frais30, z2.minimumlivr AS minimumlivr31, f1.zone_livraison_id AS zone_livraison_id32, c0.user_id AS user_id33, c0.zone_livraison_id AS zone_livraison_id_34 FROM fosuser f1 LEFT JOIN commande c0 ON f1.id = c0_.user_id LEFT JOIN zonelivraison z2 ON f1_.zone_livraisonid = z2.id':

SQLSTATE[42000]: Syntax error or access violation: 1140 In aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated column 'tacosspeyp72.f1_.username'; this is incompatible with sql_mode=only_full_group_byBonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire

Entourez votre code pour bien le mettre en forme

Ce que je veux

Décrivez ici ce que vous cherchez à obtenir

Ce que j'obtiens

Décrivez ici vos erreurs ou ce que vous obtenez à la place de ce que vous attendez :(

Aucune réponse