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 sclr_0, f1_.username AS username_1, f1_.username_canonical AS username_canonical_2, f1_.email AS email_3, f1_.email_canonical AS email_canonical_4, f1_.enabled AS enabled_5, f1_.salt AS salt_6, f1_.password AS password_7, f1_.last_login AS last_login_8, f1_.confirmation_token AS confirmation_token_9, f1_.password_requested_at AS password_requested_at_10, f1_.roles AS roles_11, f1_.id AS id_12, f1_.nom AS nom_13, f1_.prenom AS prenom_14, f1_.adresse_liv AS adresse_liv_15, f1_.ville_liv AS ville_liv_16, f1_.telephone AS telephone_17, c0_.id AS id_18, c0_.panier AS panier_19, c0_.dateCommande AS dateCommande_20, c0_.typeCommande AS typeCommande_21, c0_.adresseLiv AS adresseLiv_22, c0_.villeLiv AS villeLiv_23, c0_.modePaiement AS modePaiement_24, c0_.etat AS etat_25, c0_.infoComplementaire AS infoComplementaire_26, z2_.id AS id_27, z2_.nom AS nom_28, z2_.codePostal AS codePostal_29, z2_.frais AS frais_30, z2_.minimumlivr AS minimumlivr_31, f1_.zone_livraison_id AS zone_livraison_id_32, c0_.user_id AS user_id_33, c0_.zone_livraison_id AS zone_livraison_id_34 FROM fos_user f1_ LEFT JOIN commande c0_ ON f1_.id = c0_.user_id LEFT JOIN zone_livraison z2_ ON f1_.zone_livraison_id = 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_by