Bonjour,
Voila je rencontre un petit problème avec mon code.
Je suit l'excellente formation Symfony ici proposée, et j'ai un petit soucis (non bloquant) au moment de la recherche par filtre (Vidéo 8/12 Filtrer les biens)
J'ai détourner un filtre de recherche en paramétrant le ChoiceType présent dans le PropertySearchType comme pour le PropertyType.
class AnimalSearchType extends AbstractType
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('maxAge', IntegerType::class, [
'required' => false,
'label' => false,
'attr' => [
'placeholder' => ' Quel âge ? ',
'min' => 0
]
])
->add('type', ChoiceType::class, [
'choices' => $this->getChoices()
]);
}
private function getChoices()
{
$choices = Animal::TYPE;
$output = [];
foreach ($choices as $k => $v) {
$output[$v] = $k;
}
return $output;
}
/////////
class Animal
{
const TYPE = [
0 => 'Chat',
1 => 'Chien',
2 => 'Rongeur',
etc.....
/////////
class AnimalRepository extends ServiceEntityRepository
{
/**
* @param AnimalSearch $search
* @return Query
*/
public function findAllUnadoptedQuery(AnimalSearch $search): Query
{
$query = $this->findUnadoptedQuery();
if ($search->getMaxAge()) {
$query = $query->andWhere('a.age <= :maxage')->setParameter('maxage', $search->getMaxAge());
}
if ($search->getType()) {
$query = $query->andWhere('a.type >= :type')->setParameter('type', $search->getType());
}
return $query->getQuery();
}
Vous l'aurez compris, le formulaire de recherche doit retrouver des animaux selon leurs âge maximum et leur race, seulement voilà,
le filtre marche très bien, aucun soucis, quand je renseigne la valeurs chien dans l'input ChoiceType, la requête SQL se fait bien avec le type = 1, et me retourne tout les chiens présent en BDD, magnifique, pareil avec la valeur type = 2 etc... Malheureusement, la valeur par défaut étant Chat (type = 0), la requête ne se fait pas, il ne prends même pas en compte la requête SQL.
Voila ce que me donne la chaine de requête : http://localhost:8000/animals?maxAge=10&type=0
Et la requête SQL dans le profiler Symfony m'affiche bien la requête pour l'age mais rien pour le type.
Quelqu'un aurait une astuce pour moi siouplé?
Merci a vous pour votre temps
il te faut faire ceci :
if(!is_null($search->getType()))
$query = $query->andWhere('a.type = :type')->setParameter('type', $search->getType());
Je suis honteux de te laisser sans réponses ni remerciements après autant de temps...
Merci ENORMEMENT, tu as résolu mon problème !
Et sincèrement desolé !
Grâce à toi je peux reprendre :)