Php Symfony 2-空复选框不返回任何搜索结果
无论何时我选中“湿土”复选框,我的搜索结果都会正确地过滤并显示在湿土中生长的所有植物物种,但无论何时我不选中复选框,都不会有搜索结果。如果复选框未选中,我希望所有对象都显示,而不是一个都不显示。不确定我的逻辑是否错误,或者我的语法是否正确?在数据库中,“x”表示是 我的控制器:Php Symfony 2-空复选框不返回任何搜索结果,php,mysql,database,symfony,doctrine,Php,Mysql,Database,Symfony,Doctrine,无论何时我选中“湿土”复选框,我的搜索结果都会正确地过滤并显示在湿土中生长的所有植物物种,但无论何时我不选中复选框,都不会有搜索结果。如果复选框未选中,我希望所有对象都显示,而不是一个都不显示。不确定我的逻辑是否错误,或者我的语法是否正确?在数据库中,“x”表示是 我的控制器: public function SearchResultsAction(Request $request) { $botanicalname = $request->query->ge
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
usNULL
,则不会给出任何结果。当复选框未选中时,您是否尝试过var_dump
使用$wetsoul
变量?是的,var_dump显示选中时值为“x”,但未选中时值为空。但它不是布尔值,而是存储为字符(“x”表示是或”(“否”).那么,您如何传递wetsoil
参数?AJAX?您需要显示前端代码。这是一个非常糟糕的数据库设计。但这不是现在需要考虑的问题。