Я работаю над формой фильтра в symfony 3.4, я фильтрую пользователей по дате, способу оплаты, зоне доставки и nbCommandes, но мой запрос не работает в репозитории, мой вопрос, как добавить несуществующие nbCommandsв базе данных в моем запросе?вот моя форма: рендеринг моей формы:
и ошибка:
спасибо за вашу помощь
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
));
}
}
Контроллер:
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(u.id) as nbCommandes')
->groupBy('cmd.id');
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();
}