2016-07-29 8 views
1

Ich bin eine API in Laravel, die die folgenden Oracle-Datenbank erstellt:Paginieren API Laravel

wählen * aus table_a; Hier

ist die API-Code:

$response = []; 
try { 
    $response['status']  = 200; 
    $response['message'] = 'ok'; 
    $response['parameters'] = []; 
    $obj     = DB::select("SELECT * FROM table_a"); 
    if (!empty($obj) && count($obj)) { 
     $response['result'] = $obj; 
    } 
    else { 
     $response['result'] = 'Requested data not found'; 
    } 
} 
catch (\Exception $e) { 
    $response['status']  = 400; 
    $response['message'] = 'ok'; 
    $response['parameters'] = []; 
    $response['result']  = 'Sorry! bad request'; 
} 

return response()->json($response); 

TABLE_A hat mehr als 30 Millionen Datensätze. Ich muss API-Ergebnisse paginieren. Ich kann die Tabellendatensätze nicht jedes Mal zählen, da es einige Minuten dauert, bis die Count-Abfrage ausgeführt wird. Wie kann ich es effizient bekommen?

Antwort

0

Sie können Ihre Ergebnisse mit ->paginate('n') paginieren. Die von Laravel bereitgestellte Methode paginate sorgt automatisch für die Einstellung des richtigen Limits und Offset basierend auf der aktuellen Seite, die der Benutzer sieht. Standardmäßig wird die aktuelle Seite durch den Wert des Abfragezeichenfolgeargumentsin der HTTP-Anforderung erkannt.

In diesem Fall lassen Sie uns angeben, dass wir 15 Artikel pro Seite angezeigt werden möchten:

namespace App\Http\Controllers; 

use DB; 
use App\Http\Controllers\Controller; 

class UserController extends Controller 
{ 
    /** 
    * Show all of the users for the application. 
    * 
    * @return Response 
    */ 
    public function index() 
    { 
     $users = DB::table('users')->paginate(15); 

     return view('user.index', ['users' => $users]); 
    } 
} 
+0

Ich brauche Oracle-Tabelle (n) zu verwenden, so wäre es eine gespeicherte Prozedur in Oracle-Ebene werden. Es ist kein normaler Tisch. – dang