2016-10-28 10 views
0

Hier hinzuzufügen ist mein ClientsController:Wie Paginierung benutzerdefinierte Abfrage in CakePHP3

namespace App\Controller\Api; 

use App\Controller\Api\AppController; 

class ClientsController extends AppController{ 
    public $paginate = [ 
    'page' => 1, 
    'limit' => 5, 
    'maxLimit' => 15, 
    'fields' => [ 
     'id', 'name', 'user_id', 'dob', 'phone', 'email' 
    ], 
    'sortWhitelist' => [ 
     'id', 'name', 'user_id', 'dob', 'phone', 'email' 
    ] 
]; 




public function index(){ 
    $clients = $this->Clients->find('clients'); 
    $this->set([ 
       'clients'=>$clients, 
       '_serialize'=>['clients'] 
       ]); 

    } 

} 

Hier ist meine benutzerdefinierte Finder (ClientsTable):

public function findClients(Query $query, array $options){ 
    $query 
      ->select([ 
       'clients.id', 
       'clients.name' 
      ]) 
      ->where(['clients.user_id =' => 3]); 
    return $query; 
} 

Wie kann ich Paginierung diesem hinzufügen? Das alles funktioniert gut, es fehlt nur Seitenumbruch.

Wenn ich die Indexfunktion entferne bekomme ich Paginierung, aber dann scheint mein Finder nicht aufgerufen zu werden. Dies ist, wie der Code aussieht:

namespace App\Controller\Api; 

use App\Controller\Api\AppController; 

class ClientsController extends AppController{ 
    public $paginate = [ 
    'page' => 1, 
    'limit' => 5, 
    'finder' => 'clients', 
    'maxLimit' => 15, 
    'fields' => [ 
    'id', 'name', 'user_id', 'dob', 'phone', 'email' 
    ], 
    'sortWhitelist' => [ 
    'id', 'name', 'user_id', 'dob', 'phone', 'email' 
    ] 
]; 
} 
+0

Bisher ist die einzige Art, wie ich diese Arbeit bekommen kann, ist durch diese Komponente mit: https://github.com/bcrowe/cakephp-api-pagination – bstras21

+0

Mögliches Duplikat [Paginierung Wert json Reaktion in CakePHP Hinzufügen 3.3] (http://stackoverflow.com/questions/40225505/adding-pagination-value-to-json-response-in-cakephp-3-3) – ndm

+0

Es ist kein Duplikat, meins versucht, einen benutzerdefinierten Finder zu verwenden. – bstras21

Antwort

0

Ich habe keine Erfahrung mit den „Finder“ auf der Paginierung Array verwenden, aber Sie sollten nur Ihre Anfrage an die paginate Funktion, entlang dieser Linien passieren können, zu :

$clients = $this->paginate($this->Clients->find('clients')); 
+0

Danke für Ihre Reaktion habe ich versucht, das aber nur als Antwort erhalten: { "Kunden": [ { "id": 1, "name": "Test-Client 1", "user_id": 3, "dob": "12/18/1977", "Telefon": "715-572-5211", "E-Mail": "[email protected]", "Clients": { "ID": "1", "Name": "Test Client 1" } } ] } – bstras21

0

Sie können Code unten versuchen

$this->loadComponent('Paginator'); /*Load the Paginator component*/ 
$clients = $this->Paginator->paginate($this->Clients->findClients()); /*Pass your finder method to the Paginator*/ 

Hier ist die Dokumentation verwenden, um direkt von Paginator ist Komponenten Using the Paginator Directly

+0

Dies funktioniert auch nicht. Ich bekomme das JSON-Ergebnis, aber es gibt keine Paginate-Eigenschaft. – bstras21

+0

@ bstras21 Das ist ein ganz anderes Problem, das du in deiner Frage nicht erwähnt hast! – ndm

Verwandte Themen