2015-04-30 40 views
1
$sql = "SELECT *,earth_distance(ll_to_earth(team.lat, team.lng), ll_to_earth(23.1215939329,113.3096030895)) AS distance FROM team where earth_box(ll_to_earth(23.1215939329,113.3096030895),1000) @> ll_to_earth(team.lat, team.lng); "; 
    $result = DB::select(\DB::raw($sql)); 

大家好。如何在Laravel5中使用原始sql分頁?

這是我的控制器代碼,我的問題是,我該如何使用分頁添加到此代碼來建立我的寧靜api?

第二個問題,iOS或Android會發送「下一頁」參數,如何使用它並找到下一節數據?

如果您知道如何做或使用任何開放資源,請告訴我,謝謝!

回答

4

據我知道你不能分頁原始查詢,這裏的原因:

$result = DB::select($sql); 

$result這裏將有數組類型和paginate()Illuminate\Database\Query\Builder類中的方法。

你的情況下,可以進行這樣:

$items = DB::table('team') 
    ->selectRaw('SELECT *,earth_distance(ll_to_earth(team.lat, team.lng), ll_to_earth(23.1215939329,113.3096030895)) AS distance') 
    ->whereRaw('earth_box(ll_to_earth(23.1215939329,113.3096030895),1000) @> ll_to_earth(team.lat, team.lng)') 
    ->paginate(10); 

foreach($items as $item) { 
    echo $item->distance; 
} 

正如你可以看到這裏需要最小的努力,以原始查詢分開,selectRaw()whareRaw()方法。

+0

謝謝您的幫助!這行得通! – Kenny

+1

@Kenny你可以接受我的回答,如果有幫助的話,對於更多的讀者來說:) –

0

,如果你想進行分頁動態欄上的報告也許你處理的計算是建立一種方法,並通過您的陣列,而params在另一種選擇:

public function sort($array_of_objects, $sort_by=null, $order, $page) 
{ 
    $collection = collect($array_of_objects); 
    if ($sort_by) 
    { 

     if ($order=='desc') { 
      $sorted = $collection->sortBy(function($role) use ($sort_by) 
      { 
       return $role->{$sort_by}; 
      })->reverse(); 
     } else if ($order=='asc') { 
      $sorted = $collection->sortBy(function($role) use ($sort_by) 
      { 
       return $role->{$sort_by}; 
      }); 
     } 
    } else { 
     $sorted = $collection; 
    } 

    $num_per_page = 20; 
    if (!$page) { 
     $page = 1; 
    } 

    $offset = ($page - 1) * $num_per_page; 
    $sorted = $sorted->splice($offset, $num_per_page); 

    return new Paginator($sorted, count($array_of_objects), $num_per_page, $page); 

} 
相關問題