Merci beaucoup Bernard, et désolé pour la réponse tardive, ça m'a beaucoup tapé que je me suis concentré à faire autre chose
Décrivez ici votre problème ou ce que vous cherchez à faire.
""
public function getUsersFilters($sex, $naissancedebut,$naissancefin,$marelation,$tabac,$enfant,$langue,$religion,$alcool,$ville,$etude,$enline,$id,$pays,$latitude,$longitude,$requestedDistance)
{
$qb->select('u.id, u.username,u.profile,u.ville,u.isPhoto,u.isSocialPhoto,u.naissance,u.lastActivateDate,u.userToken,u.email,u.pays,u.codePays,u.isPayement,u.typePayement,u.expirationPayement,u.emploi,u.niveauEtude,u.typeRelation,u.maRelation,u.longitude,u.latitude,u.taille,u.enfant,u.tabac,u.ecole,u.telephone,u.alcool,u.religion,u.langue,u.description,u.sexe,u.isoCode,u.cubeId,u.cubeEmail,u.cubeFullname,u.cubeLogin,u.createdAt, u.actif');
if (isset($etude) && $etude !=null) {
$qb->andWhere('u.niveauEtude = :etude')
->setParameter('etude', $etude);
}
if (isset($enline) && $enline !=null) {
$date5mins = new \DateTime('7 minutes ago');
$qb->andWhere('u.lastActivateDate <= :line')
->setParameter('line',$date5mins);
}
if (isset($naissancedebut) && $naissancedebut !=null) {
$qb->andWhere('u.naissance BETWEEN :naissancedebut AND :naissancefin')
->setParameter('naissancedebut', $naissancedebut)
->setParameter('naissancefin', $naissancefin);
}
if (isset($marelation) && $marelation !=null) {
$qb->andWhere('u.maRelation = :marelation')
->setParameter('marelation', $marelation);
}
if (isset($tabac) && $tabac !=null) {
$qb->andWhere('u.tabac = :tabac')
->setParameter('tabac', $tabac);
}
if (isset($enfant) && $enfant !=null) {
$qb->andWhere('u.enfant = :enfant')
->setParameter('enfant', $enfant);
}
if (isset($langue) && $langue !=null) {
$qb->andWhere('u.langue IN(:langue)')
->setParameter('langue', $langue);
}
if (isset($alcool) && $alcool !=null) {
$qb->andWhere('u.alcool = :alcool')
->setParameter('alcool', $alcool);
}
if (isset($religion) && $religion !=null) {
$qb->andWhere('u.religion = :religion')
->setParameter('religion', $religion);
}
$qb->andWhere('u.pays =:pays')
->setParameter('pays', $pays);
$qb->andWhere('u.id !=:id')
->setParameter('id', $id)
->andWhere('u.actif =true');
$qb->andWhere('u.sexe !=:s')
->setParameter('s' ,$sex)
->having('distance <= :distance')
->setParameter('distance', $requestedDistance)
->orderBy('distance', 'ASC');
$query = $qb->getQuery();
$result = $query->getResult();
return $result;
}
""
Ce que je veux
Décrivez ce que vous cherchez à obtenir.
Ce que j'obtiens
Décrivez vos éventuelles erreurs ou ce que vous obtenez à la place de ce que vous attendez :(
10 réponses
Enfait je veux donner la possibilité aux utilisateurs de filtrer d'autres utilisateurs, donc certains paramètrers peuvent être null. ça me retourne aucun resultat à chaque fois alors que lorsque je regarde dans la Bd je vois que ça aurait dû me retouner les resultats
Bonjour ta function pourait-être simplifier déjà.
ça résoudera pas le problème mais ça sera déjà plus simple.
Pourquoi tu fais pas plutôt :
@Grafikart a mis une charte pour poster de jolie Topic essaye de respecter ;)
Merci pr ta répone, comment resoudre le problème alors?
Il te manque pas au depart :
oui dans le code que j'ai collé ici il n'ya pas, mais chez moi si,
Bonjour,
J'ai eu le même problème que toi et j'ai cherché pendant ... des jours. Mais j'ai trouvé. C'était un problème de syntaxe.
C'est pour une Asso. Je sélectionne dans un formulaire un 1er critère "circo" et je rajoute des options supplémentaires (case à cocher).
Attention, il faut créer une entité spéciale qui ne soit pas mappée avec ton ORM (elle ne vise pas à MODIFIER ta BDD, seulement à l'interroger et récupérer des résultats).
Donc dans mon repository j'ai ce qui suit :
Et dans mon controller j'ai ça :
Au final, il te faut créer une entité non mappée + un formulaire pour pouvoir sélectionner un ou plusieurs critères.
Pour le controller et le repo, le code est ci-dessus et ça marche parfaitement bien.
Te reste juste à l'adapter pour ton besoin.
Bon courage
En fait en relisant mon post je pense que tu vas galérer avec l'entité non mappée.
Donc j'ai une entité "Contacts" qui me sert pour mon CRUD (Ajouter, modifier, supprimer).
J'ai créé une autre entité "ContactsSerach" comme ci-dessous. Tu constateras qu'elle n'est pas liée à l'ORM. Normal ... c'est pour chercher.
La voici ... et là tu as tous sauf le formulaire de recherche (je te laisse le faire). Les case à cocher sont des booléens donc 1 ou 0 dans la BDD.
A toi de jouer ...
De rien ... si ça t'a rendu service tant mieux.
Un dernier point sur le fonctionnement du formulaire de recherche :
- seul le premier critère circo est obligatoire (zone géographique) ... mais ce n'est pas obligatoire. Moi ça a été mon choix.
- tous les autres critères sont optionnels, c'est à dire que tu peux chercher par nom et/ou par critère (un ou plusieurs)
- par exemple recherche par nom, ou recherche (sans nom) sur un ou plusieurs critères grâce à chaque if.
- il faut utiliser "andwhere" sinon un "where" écrase le reste de ta requête.
- quand tu transmets les infos à la vue, dans la vue tu fais une boucle en twig ... {% for contact in contacts %} et tu affiches tes résultats ligne par ligne (c'est du classique)
- j'ai mis un compteur pour avoir le total des recherches trouvées
<tbody> {% set sum = 0 %} {% for contact in contacts %} {% set sum = sum + 1 %} .....
</tbody> </table> <div style="color: red"> <h5>TOTAL : {{ sum }} </h5></div><br> </div> Voilà ... bonnes fêtes de fin d'année
merci et meilleur à toi.