Laravel - 使用Eloquent在现场搜索工具

时间:2014-01-06 20:57:35

标签: php laravel-4 eloquent

我是一个laravel新手!并努力寻找如何创建搜索并返回结果。

这是我在gist https://gist.github.com/anonymous/8289692

上的所有代码

我把所有内容都放在从表格到路线,控制器和模型的要点中!

/* Route */
Route::get('/search/{q}', 'HomeController@search');


/* Form from web page */
<form class="navbar-form navbar-left" role="search" action="/search/" method="post">
<div class="input-group">
<input type="text" class="form-control" placeholder="Search Programmes" name="1">
<span class="input-group-btn">
<input type="submit" class="btn btn-primary" value="Search">
</span>
</div><!-- /input-group -->
</form>


/* Controller */
public function search($q)
{
$q = Input::get('term');
$searchTerms = explode(' ', $q);
$query = DB::tables('wc_program');

foreach($searchTerms as $term)
{
$query->where('JobRef', 'LIKE', '%'. $term .'%');
}
$results = $query->get();
}


/* Model (just in case) */
class Search extends Eloquent {

protected $table = 'wc_program';
public $timestamps = false;
}

1 个答案:

答案 0 :(得分:1)

您的代码中有一些问题


您的表单正在使用POST方法,但您的路由是GET路由。这说明了NotFoundHttpException。所以让你的路线像:

Route::post('search', 'HomeController@search');

不需要参数,因为无论如何你用POST来捕捉它,而不是GET!

<小时/> 您的输入没有名称&#39; term&#39;,但&#39; 1&#39;。这可能是一个错字,但无论如何,这样做:

<input type="text" class="form-control" placeholder="Search Programmes" name="term">

另外,我建议使用Laravel的URL方法来构建正确的URL:

<form class="navbar-form navbar-left" role="search" action="{{URL::to('search')}}" method="post">

或更好:

{{Form::open(array('url' => 'search', 'class' => 'navbar-form navbar-left', 'role' => 'search')}}

<小时/> 现在,到控制器。让我们重写以适应新路线:

public function search()  //no parameter now
{
  $q = Input::get('term');
  if($q && $q != ''){
    $searchTerms = explode(' ', $q);
    $query = DB::table('wc_program');  // it's DB::table(), not DB::tables

    if(!empty($searchTerms)){

      foreach($searchTerms as $term) {
        $query->where('JobRef', 'LIKE', '%'. $term .'%');
      }
    }
    $results = $query->get();

    dd($results); // for debugging purpose. Use a View here
   }
}