使用 Laravel 进行手动自动完成搜索,如何将信息传递给视图中的 div

Manual autocomplete search with Laravel, how to pass on info to div's in views

我正在尝试进行自动完成搜索,即从输入中的字符串搜索,在我的数据库中从多个表(如 Persons、Users 和 Bands)进行搜索。使用 Laravel 4.2.

然后我想在我已经在的视图上的#div 中访问和更新三个 object。

我已经尝试了很多,但是这个很难。我的解决方案在 localhost 上运行,但不能在线运行,但无论如何,通过使用 ->(the objects) 传递视图,这是一个糟糕的解决方案。在线失败,因为 headers 已经发送。

我认为我的解决方案应该是这样的:

查看:

{{ Form::open(['action' => ['SearchController@search'], 'method' => 'post']) }}
{{ Form::text('term', '', ['class' => 'uk-width-1-1', 'id' =>  'term', 'placeholder' =>  'Søk etter person'])}}
{{ Form::close() }}

控制器:

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

    $fest = Session::get('festival');
    $festival = Festival::find($fest);

        $persons = DB::table('fs_persons')
            ->join('fs_festival_persons', 'person_id','=','fs_persons.id')
            ->where('festival_id', '=', $fest)
            ->get();  

    foreach ($persons as $query)
    {
        if ((strpos(strtolower($query->firstname), strtolower($term)) !== false) OR ((strpos(strtolower($query->lastname), strtolower($term)) !== false))) {
           $results[] = [ 'id' => $query->id, 'value' => $query->firstname.' '.$query->lastname, 'tlf' => $query->tlf ];
        }

}
return Response::json($results);
}

但我不确定如何正确使用它,这里只有一个 object,尝试用 object 制作一个多级数组,但这对我来说非常混乱。这是来自 jquery 自动完成的一小段代码,我可以正常工作,但我想要自己的搜索结果展示。

在视图中,我希望能够在搜索输入的 keyup 上进行更新,并且我可以在哪里使用 blade 模板:

@if($persons)
 @if(sizeof($persons)>0)
    <div class="uk-width-small-4-4">
    Personar:
    </div>
    <div class="uk-width-small-4-4">
    @foreach($persons as $person)
    <?php
                $tmp_pers = Person::find($person->id);
?>

    <span class="search_name">
    <a href='{{ URL::to("festival/$festivalen->slug/person/$person->id") }}'>
    {{ $person->firstname }} {{ $person->lastname }}
    </a>
    </span>
</div>
@endforeach
@endif
@endif

但我不确定如何从 json 中 make\retrieve 变量,这一切比我预期的要难得多,所以希望有人能指导我,谢谢!

有一个示例项目可供您参考。 laravel-smart-search

还应该存在您视图中的波纹管代码集,您可以在 "select:" 中定义您想要的值。当用户 select 时,其他元素的任何建议都会改变。

查看

$(function() {
      $("#search_text").autocomplete({
          source: "{{URL::route('searchajax')}}",
          minLength: 2,
          select: function( event, ui ) {
              $('#data').val(ui.item.id);
              $('#search_text').val(ui.item.value);
              $('#search').hide();
          }
      });
  });

控制器

foreach ( $persons as $query ){
        $data[] = array('value' => $row->$column, 'id' =>$row->id);
}
return Response::json($data);
your view 

<script>
  <?php foreach($Prods as $Pr)
  {
      $arr[]=$Pr->Pname;
  }
  ?>
  $( function() {
  var availableTags = <?php echo json_encode($arr); ?>;
    $( "#tags" ).autocomplete({
      source: availableTags
    });
  } );
  </script>

and your conrtoller

public function create()
    {   
        $Products = DB::table('Products')->get();
        $Prods=DB::table('Products')->select('Pname')->get();
        return view('test', ['Products'=>$Products],['Prods'=>$Prods]);
       }