Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony 2-空复选框不返回任何搜索结果_Php_Mysql_Database_Symfony_Doctrine - Fatal编程技术网

Php Symfony 2-空复选框不返回任何搜索结果

Php Symfony 2-空复选框不返回任何搜索结果,php,mysql,database,symfony,doctrine,Php,Mysql,Database,Symfony,Doctrine,无论何时我选中“湿土”复选框,我的搜索结果都会正确地过滤并显示在湿土中生长的所有植物物种,但无论何时我不选中复选框,都不会有搜索结果。如果复选框未选中,我希望所有对象都显示,而不是一个都不显示。不确定我的逻辑是否错误,或者我的语法是否正确?在数据库中,“x”表示是 我的控制器: public function SearchResultsAction(Request $request) { $botanicalname = $request->query->ge

无论何时我选中“湿土”复选框,我的搜索结果都会正确地过滤并显示在湿土中生长的所有植物物种,但无论何时我不选中复选框,都不会有搜索结果。如果复选框未选中,我希望所有对象都显示,而不是一个都不显示。不确定我的逻辑是否错误,或者我的语法是否正确?在数据库中,“x”表示是

我的控制器:

public function SearchResultsAction(Request $request)
    {
        $botanicalname = $request->query->get('botanicalname');
        $commonname = $request->query->get('commonname');
        $wetsoil = $request->query->get('wetsoil');

        $repository = $this->getDoctrine()->getRepository('AppBundle:Shrubs');

        $query = $repository->createQueryBuilder('p');

        $shrubs = $query
            ->where($query->expr()->like('p.botanicalname',':botanicalname'))
            ->setParameter('botanicalname', '%'.$botanicalname.'%')
            ->andwhere($query->expr()->like('p.commonname',':commonname'))
            ->setParameter('commonname', '%'.$commonname.'%')
            ->andWhere($query->expr()->like('p.wetsoil',':wetsoil'))
            ->setParameter('wetsoil', $wetsoil)
            ->orderBy('p.commonname', 'ASC')
            ->getQuery()
            ->getResult();

        return $this->render('shrubs/searchresults.html.twig', array(
            'shrubs' => $shrubs,
        ));
    }
以及我在HTML页面上的输入:

          <label for="wetsoil">Tolerates Wet Soil: </label>
          <input type="checkbox" name="wetsoil" value="x">
耐湿土壤:
注意:由于其他技术原因,我选择不使用标准的细枝语法({form_widget(form.wetsoul)}})

前端:

 <table class="table table-striped">
                <thead>
                {% if shrubs | length == 0 %}
                <h3>No species match your search criteria. <a href="{{ path('shrubs_search')}}">Try again.</a></h3>
                {% else %}
                <tr>
                    <th>Common Name</th>
                    <th>Botanical Name</th>
                </tr>
                </thead>
                <tbody>
                <tr>

                    {% endif %}
                    {% for shrub in shrubs %}
                    <td><a href="{{ path('shrubs_show', { 'id': shrub.number }) }}">{{ shrub.commonname }}</a></td>
                    <td><a href="{{ path('shrubs_show', { 'id': shrub.number }) }}">{{ shrub.botanicalname }}</a></td>
                    {#<td>#}
                        {#<ul>#}
                            {#<li>#}
                                {#<a href="{{ path('shrubs_show', { 'id': shrub.number }) }}">show</a>#}
                            {#</li>#}
                            {#<li>#}
                                {#<a href="{{ path('shrubs_edit', { 'id': shrub.number }) }}">edit</a>#}
                            {#</li>#}
                        {#</ul>#}
                    {#</td>#}
                </tr>
                {% endfor %}
                </tbody>
            </table>

{如果灌木|长度==0%}
没有与您的搜索条件匹配的物种。
{%else%}
通用名
植物名称
{%endif%}
{灌木中灌木的百分比%}
{##}
{{ul>}
{{}
  • } {##} {#
  • } {{}
  • } {##} {#
  • } {#} {##} {%endfor%}
    我假设复选框是数据库中的一个布尔字段,如果参数
    $wetsoil
    us
    NULL
    ,则不会给出任何结果。当复选框未选中时,您是否尝试过
    var_dump
    使用
    $wetsoul
    变量?是的,var_dump显示选中时值为“x”,但未选中时值为空。但它不是布尔值,而是存储为字符(“x”表示是或”(“否”).那么,您如何传递
    wetsoil
    参数?AJAX?您需要显示前端代码。这是一个非常糟糕的数据库设计。但这不是现在需要考虑的问题。