2016-07-28 154 views
0

我试图创建一个搜索表单,它在用户输入搜索字段时搜索数据库表中的记录。
Laravel Ajax搜索



控制器

public function search() { 
    // get the search term 
    $term = Input::get('term'); 

    // search the members table 
    $members = DB::table('members') 
       ->where(concat("members.member_first_name,' ',members.member_last_name"), 'LIKE', "$term") 
       ->orwhere(concat("members.member_last_name,' ',members.member_first_name"), 'LIKE', "$term") 
       ->orwhere(concat("members.member_name_affix,' ',members.member_last_name,' ',members.member_first_name"), 'LIKE', "$term") 
       ->orwhere(concat("members.member_first_name,' ',members.member_name_affix,' ',members.member_last_name"), 'LIKE', "$term") 
       ->orwhere('members.member_first_name', 'LIKE', "$term") 
       ->orWhere('members.member_last_name', 'LIKE', "$term") 
       ->orWhere('members.member_business_address', 'LIKE', "$term") 
       ->get(); 

    // return the results in JSON format 
    return response()->json($members); 
} 

路线

Route::get('search', '[email protected]'); 

查看

<!-- THE SEARCH FORM --> 
<form method="GET" id="search-form"> 
    <input type="search" id="term" name="term" onkeyup="ajaxSearch()" placeholder="Search the members table..." autofocus> 
</form> 

<!-- THE AJAX FUNCTION --> 
<script> 
    function ajaxSearch() { 
     $.ajax({ 
      url: 'search', 
      type: 'GET', 
      data: {term: $('#term').val()}, 
      dataType: 'JSON', 
      success: function(response) { 
       console.log(data); 
      } 
     }); 
    } 
</script> 

<!-- THE RESULTS TABLE --> 
<div class="clear"></div> 
<div id="resultTableWrapper"> 
    <table id="resultTable"> 
     <thead> 
      <tr> 
       <th>Name</th> 
       <th>Address</th> 
       <th>Business Address</th> 
       <th>Join Date</th> 
      </tr> 
     </thead> 
     <tbody></tbody> 
    </table> 
</div><!-- /#resultTableWrapper --> 
<div class="clear"></div> 
<p id="search-info">Please type your search phrase in the field above.</p> 

<!-- USE THE JSON RESPONSE TO FILL THE RESULTS TABLE --> 
@if (isset($_GET['term'])) 
    @foreach ($members as $member) 
     <tr> 
      <td> 
       <strong> 
        {!! $member->member_name_affix.' '.$member->member_last_name.' '.$member->member_first_name.' '.$member->member_title !!} 
       </strong><br><br> 
       <div class="unhighlight"> 
        {!! $member->member_business_position !!}<br><br> 
        {!! $member->member_business_name !!} 
       </div> 
      </td> 
      <td class='unhighlight'> 
       @if ($member->member_private_address) 
        <span> 
         {!! $member->member_private_address !!} <br> 
         {!! $member->member_private_zip_code. ' ' .$member->member_private_location !!} 
        </span><br> 
        <div class='clear'></div> 
       @endif 
      </td> 
      ... and so on ... 
     </tr> 
    @endforeach 
@endif 




当我开始输入字母“A”在搜索字段中我得到的错误消息:
GET http://localhost.local/search?term=a 500 (Internal Server Error)



我很新的laravel,我会为任何非常感谢有帮助!

UPDATE

感谢amieiro我设法弄清楚,错误似乎是与输入:: get()方法:
enter image description here

+1

内部服务器错误通常意味着你搞砸了你的代码中的东西。检查您的laravel存储/日志文件夹或apache日志以获取有关它的提示。 –

+0

谢谢你的帮助。但是,我只能在日志文件夹中找到.gitignore文件。 – Schwesi

+1

您应该检查ajax响应的主体。它会有更多的信息出了什么问题。您可以在开发人员工具中检查它。您可以查看Chrome的[示例](http://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art034)。 –

回答

1

更改您的查询像这样,在whereorWhere第一个参数应该是列名也加%$term并删除不必要的条件。

public function search(Request $request) { 
$term = $request->input('term'); 
$members = DB::table('members as m') 
      ->where('m.member_first_name', 'LIKE', "%$term%") 
      ->orWhere('m.member_last_name', 'LIKE', "%$term%") 
      ->orWhere('m.member_business_address', 'LIKE', "%$term%") 
      ->get(); 
return response()->json($members); 
} 
+0

谢谢你的帮助!我做到了,但它没有改变任何东西。仍然收到相同的错误信息。 – Schwesi

3

您可以检查试图查看JSON的错误。在谷歌浏览器中,您可以看到它检查元素,重新加载页面,然后在网络选项卡XHR过滤器中。你可以看到它的下一个图像

enter image description here

+0

非常感谢您指出这一点!我相应地更新了我的答案! – Schwesi

2

在根据你的更新,你需要包括你的控制器内Input简单地使用

use App\Http\Controllers\Input; 

在命名后的文件的顶部。而不是使用Input外观,你可以使用Request外观更好的编码标准

+0

如果我这样做,我会得到'Class Input'找不到。 – Schwesi

+1

我现在有输入部分工作,谢谢! '公共功能搜索(Request $ request){ $ term = $ request-> input('term');' – Schwesi

+1

不客气。如果它真的帮助了你,你可以放弃。我已经更新了我的答案 – devmyb