Php Symfony2中的搜索功能不工作
我正在使用symfony框架进行一个项目。我只想做一个简单的搜索功能,它可以搜索包含用户输入内容的所有实体。当我试图运行我的代码时,它不起作用,它会继续重定向到我的“未找到”结果,即使它们是要查找的相关文件 这是我的控制器:Php Symfony2中的搜索功能不工作,php,symfony,doctrine,Php,Symfony,Doctrine,我正在使用symfony框架进行一个项目。我只想做一个简单的搜索功能,它可以搜索包含用户输入内容的所有实体。当我试图运行我的代码时,它不起作用,它会继续重定向到我的“未找到”结果,即使它们是要查找的相关文件 这是我的控制器: public function searchAction(Request $request){ $request = $this->getRequest(); $data = $request->request->get('
public function searchAction(Request $request){
$request = $this->getRequest();
$data = $request->request->get('search');
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
'SELECT a,b,c
FROM SampleBundle:transactionDetail a
JOIN a.transaction b
JOIN b.documentRelated c
WHERE a.pNumber LIKE :data
AND b.senderId LIKE :data
AND b.receiverId LIKE :data
AND b.transactDate LIKE :data
AND a.amountPaid LIKE :data')
->setParameter('data',$data);
$res = $query->getResult();
if($res == null){
return $this->render('SampleBundle:Sample:noresult.html.twig');
}
return $this->render('SampleBundle:Sample:search.html.twig', array('res' => $res));
}
和我的search.html.twig
{% extends '::layout.html.twig' %}
{% block pageTitle %} Related Files Found{% endblock %}
{% block body %}
div class="table-responsive margins" >
<table class="table table-condensed table-striped table-bordered table-hover no-margin">
<thead>
<tr style="height: 40px; ">
<th>Transaction Date</th>
<th>Sender ID</th>
<th>Receiver ID</th>
<th>P Number</th>
<th>Amount Paid</th>
</tr>
</thead>
<tbody>
<tr>
{% for res in res %}
{% for other in res.transaction %}
<td >{{res.transaction.transactDate|date('YMd')}} {{res.ediTransaction.transactionDate|date('H:i')}}</td>
<td>{{res.transaction.senderId}}</td>
<td >{{res.transaction.receiverId}}</td>
{% if other.pNumber != null %}
<td style="word-break: break-all">{{other.pNumber}}</td>
{% else %}
<td>N/A</td>
{% endif %}
{% if other.amountPaid != null %}
<td style="word-break: break-all">{{other.amountPaid}}</td>
{% else %}
<td>N/A</td>
{% endif %}
</tr>
{% endfor %}
{% endfor %}
</tbody>
</table>
</div>
{% endblock %}
{% block javascripts %}
{% javascripts
'bundles/sampledoc/js/jQuery.js'
'bundles/sampledoc/js/bootstrap.js'
%}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
{% endblock %}
{%extends'::layout.html.twig%}
{%block pageTitle%}找到相关文件{%endblock%}
{%block body%}
div class=“表格响应利润率”>
交易日期
发送者ID
接收器ID
P数
已付金额
{res%中的res%为%res}
{res.transaction%中的其他%
{{res.transaction.transactionDate | date('YMd')}{{{res.ediTransaction.transactionDate | date('H:i')}}
{{res.transaction.senderId}
{{res.transaction.receiverId}
{%if other.pNumber!=null%}
{{other.pNumber}
{%else%}
不适用
{%endif%}
{%if other.amountPaid!=null%}
{{other.amountPaid}}
{%else%}
不适用
{%endif%}
{%endfor%}
{%endfor%}
{%endblock%}
{%block javascripts%}
{%javascripts
'bundles/sampledoc/js/jQuery.js'
'bundles/sampledoc/js/bootstrap.js'
%}
{%endjavascripts%}
{%endblock%}
我的搜索表格:
<form action="{{path('sample_search')}}" method="POST">
<div class="form-group input-group">
<input type="text" name="search" class="form-control" placeholder="Search" style="width: 200px; float: right;" >
<span class="input-group-btn"><button class="btn btn-default" type="submit" style="margin-right: 20px;"><i class="fa fa-search"></i></button></span>
</div>
</form>
谁能帮我做这个吗?提前感谢。数据不能满足您的所有条件。如果您和查询数据中的所有内容都必须匹配所有字段,则可能不会返回任何结果 尝试以下方法:
WHERE a.pNumber LIKE :data
OR b.senderId LIKE :data
OR b.receiverId LIKE :data
OR b.transactDate LIKE :data
OR a.amountPaid LIKE :data')
->setParameter('data', "%$data%");
`
WHERE a.pNumber LIKE :pNumber
AND b.senderId LIKE :senderId
AND b.receiverId LIKE :recieveId
AND b.transactDate LIKE :transactDate
AND a.amountPaid LIKE :amountPaid')
->setParameters(array(
'pNumber' => $data['pNumber'],
'receiverId' => $data['receiverId'],
'transactDate' => $data['transactDate'],
'amountPaid' => $data['amountPaid'],
));
`
并查看使用
$query->getSQL()
通过这种方式,您可以直接在DB上测试查询。假设$data是一个包含所有优点的关联数组,我认为您不能像现在这样将其交给setParameter()。对于每个“LIKE”子句,您需要更具体地分解它 完全未经测试,但我怀疑您正在寻找:
WHERE a.pNumber LIKE :data
OR b.senderId LIKE :data
OR b.receiverId LIKE :data
OR b.transactDate LIKE :data
OR a.amountPaid LIKE :data')
->setParameter('data', "%$data%");
`
WHERE a.pNumber LIKE :pNumber
AND b.senderId LIKE :senderId
AND b.receiverId LIKE :recieveId
AND b.transactDate LIKE :transactDate
AND a.amountPaid LIKE :amountPaid')
->setParameters(array(
'pNumber' => $data['pNumber'],
'receiverId' => $data['receiverId'],
'transactDate' => $data['transactDate'],
'amountPaid' => $data['amountPaid'],
));
`
您是否交叉检查了您的查询是否实际返回了结果?如果您执行
dump($res)
是否看到任何输出?结果是:数组(0){}我现在没有任何错误,但仍然无法工作。。。我的url看起来像这样任何有想法的人,你能帮助我吗?它给了我一个错误:Controller“Matrix\MatrixEdiBundle\Controller\MatrixController::searchAction()”要求你为“$sender\u id”参数提供一个值(因为没有默认值,或者因为这个参数后面有一个非可选参数).$sender\u id不在示例代码中,这是与SQL问题不同的问题。是的,如果您遇到错误,我认为您必须在发布上述代码后将$sender\u id添加到searchAction()的签名中。我已经修复了它,但在搜索时它不会显示找到的相关文件。为什么会这样?我可以把$query->getSQL()放在哪里?另外,如果我理解您在这里所做的事情,我强烈建议您检查它,因为它给了我一个错误:警告:非法字符串偏移量'pNumber',我应该把我的表单放在哪里才能获得正确的搜索数据?