使用Eloquent和Laravel从数据库中提取数据

时间:2014-03-06 20:46:54

标签: php jquery ajax laravel-4

Ajax noobie问题:

我想使用Ajax从数据库中获取结果,并根据用户输入表格的内容显示该行。

我想知道如何做到这一点:

这是我的控制器:

     public function pricing()
  {
    $q = Input::get('term');
    if($q && $q != ''){
        $searchTerms = explode(' ', $q);
        $query = DB::table('pricing');

        if(!empty($searchTerms)){

            foreach($searchTerms as $term) {
                $query->where('unit', 'LIKE', '%'. $term .'%');
            }
        }

        $results = $query->paginate(5);
        $results->appends(array('term' => Input::get('q')));

        dd($results);


        return View::make('layouts.buyresults', compact('results'));
    }
}

我的表单就像一个名为“term”和bootstrap类的输入字段。

雄辩的模特

  <?php

     class Pricing extends Eloquent {

      protected $table = 'pricing';

     }

基于此,如何设置路线,我目前有:

    Route::get('site/where-to-buy', 'HomeController@pricing');

在我的表单中我的操作是一样的,所以如何在不离开页面而不刷新的情况下实现此目的?因此,用户输入一个数字,例如10,它们在DB和ajax请求中匹配,然后拉出该行并在表格中显示。

提前致谢:)

1 个答案:

答案 0 :(得分:0)

如果您想拥有动态表,可以考虑使用datatables之类的插件。该插件还提供搜索,排序和过滤选项。如果使用插件不是一个选项,您可以监听input相关事件并使用jQuery实用程序函数向服务器发送Ajax请求( datatables也使用场景背后的jQuery的ajax方法) :

$('#theInput').on('keyup', function() {
   $.get('url', { term: $.trim(this.value) }, function(data) {
      if (data.count > 0) {
          // appending the rows, `html` overwrites the tbody's existing rows
          $('#theTable tbody').html(data.view); 
      } else {
        // Nothing found, notify the user
      }
   }, 'json');
}); 

此请求期望获取其中包含viewcount的JSON字符串,count应该是查询结果的数量,而view是HTML的匹配的行,现在在您的控制器中,您可以调用生成HTML的视图并检查请求的类型:

if ( Request::ajax() )
{
   $response = array();
   $response['count'] = $query->count(); 
   $response['rows'] = $query->get(); 
   $response['view'] = View::make('row_generator')
                           ->with('rows', $response['rows'])
                           ->render();
   return Response::json($response); 
}
else 
{ 
  // handle the non-ajax requests
}

当然,还有许多其他方法可以检索/操作数据,您也可以在客户端生成表行。