phpsymfonysearchtwig

Search Système Symfony


Hello I shall like creating a system of search on my blog except that it does not work! I made this code I have an error of this type:

SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

If you have a solution for me help that shall be nice thank you very much! my code :

/**
 * @Route("/recherche")
 * @param Request $request
 * @return Response
 */
public function search(Request $request): Response
{

    $info = $this->getDoctrine()->getRepository(InfoMore::class)->findByInfo(2);


    $form = $this->createForm(SearchType::class);

    $form->handleRequest($request);

    if($form->isSubmitted() && $form->isValid()) {

        $contentOfUsers = $form->getData();

        $contentOfUsers['name'];

        $search = $this->getDoctrine()->getRepository(Articles::class)->findBysearch($contentOfUsers);

        return $this->render('backOffice/search/resultat.html.twig', [
            'resultatOfSearch' => $search,
            'info' => $info
        ]);

    }

    return $this->render('backOffice/search/search.html.twig', [
        'form' => $form->createView()
    ]);
}

my formType :

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', TextType::class, [
                'attr' => [
                    'maxlength' => '30',
                    'minlength' => '3',
                    'label' => 'nom'
                ],
                'constraints' => [ new Assert\Length([
                    'min' => '2',
                    'minMessage' => 'Votre nom doit contenir au minimum {{ limit }} caractères.',
                    'max' => '30',
                    'minMessage' => 'Votre nom ne doit pas dépasser {{ limit }} caractères.'
                ])]
            ])
        ;
    }

My Repository:

/**
 * @param $contentOfUsers
 * @return array
 * @throws \Exception
 */
public function findBysearch(array $contentOfUsers) {
    $query = $this->createQueryBuilder('r')
        ->select('r')
        ->where('r.nameArticle LIKE :chaine')
        ->setParameter(':chaine', $contentOfUsers)
        ->getQuery();

    return $query->getResult();

}

my views :

{{ form_start(form) }}

    {{ form_label(form) }}
    {{ form_widget(form) }}

<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>

{{ form_end(form) }}

and resultat :

{% for search in resultatOfSearch %}

    {{ search.resultatOfSearch }}

{% endfor %}

Solution

  • Try this syntax in findBysearch

    $queryBuilder = $this->createQueryBuilder('r');
    $queryBuilder->select('r')
          ->where($queryBuilder->expr()->like('r.nameArticle', ':chaine'))
          ->setParameter('chaine', '%' . $contentOfUsers . '%');
    $query = $queryBuilder->getQuery();
    
    return $query->getResult();