Php Symfony2中的搜索功能不工作

Php Symfony2中的搜索功能不工作,php,symfony,doctrine,Php,Symfony,Doctrine,我正在使用symfony框架进行一个项目。我只想做一个简单的搜索功能,它可以搜索包含用户输入内容的所有实体。当我试图运行我的代码时,它不起作用,它会继续重定向到我的“未找到”结果,即使它们是要查找的相关文件 这是我的控制器: public function searchAction(Request $request){ $request = $this->getRequest(); $data = $request->request->get('

我正在使用symfony框架进行一个项目。我只想做一个简单的搜索功能,它可以搜索包含用户输入内容的所有实体。当我试图运行我的代码时,它不起作用,它会继续重定向到我的“未找到”结果,即使它们是要查找的相关文件

这是我的控制器:

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')}}&nbsp;&nbsp;{{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',我应该把我的表单放在哪里才能获得正确的搜索数据?