How to use raw sql Pagination in Laravel5?

后端 未结 2 1970
逝去的感伤
逝去的感伤 2020-12-20 06:17

This is my Controller code:

$sql = \"SELECT *,earth_distance(ll_to_earth(team.lat, team.lng), ll_to_earth(23.1215939329,113.3096030895)) AS distance FROM tea         


        
2条回答
  •  青春惊慌失措
    2020-12-20 06:32

    As far as I know you can't paginate raw query, here's why:

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

    $result here will have the array type and paginate() is the method from the Illuminate\Database\Query\Builder class.

    Your case can be performed this way:

    $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;
    }
    

    As you can see minimal effort is needed here to separate raw query to selectRaw() and whereRaw() methods.

提交回复
热议问题