Symfony 5中带有like参数的搜索表单不返回结果

Posted

技术标签:

【中文标题】Symfony 5中带有like参数的搜索表单不返回结果【英文标题】:Search form in Symfony 5 with like parameter does not return results 【发布时间】:2021-09-05 14:38:47 【问题描述】:

我试图只返回搜索表单的结果,但该函数返回 0 个结果。 我没有收到任何错误,但我的结果丢失了,经过几天的搜索,我仍然不明白我做错了什么。提前致谢。

我想在表单中输入一个参数并在我点击提交按钮后返回结果。

这里是存储库函数:

public function findAllWithSearch(?string $cont)
    
        return $this->_em->getConnection()->executeQuery(
            "select cont from account_links al 
                where  al.cont like :cont
                ",['cont'=>'%"' .$cont . '"%']
        )->fetchAllAssociative();
    

这里是控制器功能:

public function searchAction(Request $request,AccountLinksRepository $repository)
    
        $searchForm=$this->createFormBuilder()
            ->add('cont')
            ->add('search',SubmitType::class)
            ->getForm();
        $searchForm->handleRequest($request);
        if($searchForm->isSubmitted() && $searchForm>isValid())

             $data = $searchForm->getData();
             $cont = $data['cont'];

             $links = $repository->findAllWithSearch($cont);

             return $this->render('account_links/search.html.twig', [
                 'account_links' => $links]);

        

        return $this->render('account_links/index.html.twig',[
            'form'=>$searchForm->createView(),

        ]);
    

search.html.twig:

<form>
<div class="input-group mb-3">
    <input type="text"
           name="q"
           class="form-control"
           placeholder="Search..."
    >
    <div class="input-group-append">
        <button type="submit"
                class="btn btn-outline-secondary">
            <span class="fa fa-search"></span>
        </button>
    </div>
</div>
</form> 

index.html.twig:

% for account_link in account_links %
    <tr>
        <td> account_link.id </td>
        <td> account_link.subscriber </td>
        <td> account_link.cont </td>
        <td> account_link.client </td>
        <td> account_link.relationshipType </td>
% endfor %

【问题讨论】:

【参考方案1】:
    看起来你的树枝位置不对(倒置) 如果您在 twig 中手动定义表单,则无需使用createFormBuilder 避免使用像select * from account_links这样的sql查询字符串

存储库

public function findAllWithSearch(?string $cont)
    
        return $this->createQueryBuilder('o')
            ->andWhere('d.cont like :val')
            ->setParameter('val', '%'.$value.'%')
            ->getQuery()
            ->getResult();
    

控制器

public function searchAction(Request $request,AccountLinksRepository $repository)
    
         if('POST' === $request->getMethod()) 

             
             $search = $request->request->get('q');

             $links = $repository->findAllWithSearch($cont);

             return $this->render('account_links/search.html.twig', [
                 'account_links' => $links
             ]);

         

         return $this->render('account_links/index.html.twig',[
             'form'=>$searchForm->createView(),

         ]);
    

【讨论】:

非常感谢:)

以上是关于Symfony 5中带有like参数的搜索表单不返回结果的主要内容,如果未能解决你的问题,请参考以下文章

将参数传递给 symfony 5.4 表单测试不起作用

CodeIgniter "like()" 函数在搜索词中带有 % 通配符

mysql怎么用like检索字段中带有数字的语句?

Symfony3 查询搜索功能DQL语句like查询

Hibernate中带有命名查询的可选参数?

Symfony 5 Typeahead 搜索 [关闭]