【问题标题】:Laravel - Search Facility on site using EloquentLaravel - 使用 Eloquent 进行现场搜索
【发布时间】:2014-01-06 20:57:35
【问题描述】:

我是 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;
}

【问题讨论】:

  • 你的代码有什么问题
  • 您应该将代码放在这里,而不是放在外部资源上(来吧,这是 40 行代码)。无论如何,有什么问题?帮助什么?不管用?它应该做什么/它做什么?
  • 返回如下错误:Symfony\Component\HttpKernel\Exception\NotFoundHttpException
  • 您在使用自己的命名空间吗?如果是这样,请确保您相应地调整路线,例如laravel.com/docs/controllers。您还应该尝试将参数设为可选,因为在用户通过表单提交之前,该参数不会出现在 URL 中。 Route::get('/search/{q?}', 'HomeController@search');
  • 不使用自己的命名空间,不,所以我猜这是根据错误消息引起探测的路线,所以我会尝试你的路线建议@Dave

标签: php laravel-4 eloquent


【解决方案1】:

您的代码中有一些问题


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

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

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


您的输入没有名称“术语”,而是“1”。这可能是一个错字,但无论如何,让它这样:
<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
   }
}

【讨论】:

  • 感谢您,下一个问题现在可以正常工作了,我该如何分页?
猜你喜欢
  • 2020-04-18
  • 1970-01-01
  • 2017-03-21
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
  • 2017-11-23
相关资源
最近更新 更多