2016-06-03 8 views
1

So kann ich mit paginate() paginieren und ich kann auf der Grundlage eines Accessor (ein where() auf der Sammlung) filtern. Paginate verwendet jedoch einen Abfrage-Generator und wo() für eine Auflistung eine Auflistung zurückgibt.Laravel 5.2 - Filterung auf ein benutzerdefiniertes Attribut und dann paginieren

Also wenn ich eine Reihe von Elementen/Filter durch ein benutzerdefiniertes Attribut erhalten und dann die Ergebnismenge paginieren möchte .... wie mache ich das ??

Accessor:

public function getRequiredToReportAttribute() 
{ 
    // return boolean based off of complicated business logic 
} 

Index-Methode:

public function index() 
{ 
    //what im doing (redacted) 
    $employers = (new App\Employers')->paginate($this->perPage); 

    // what I would like to be doing 
    $employers = (new App\Employers)->where('required_to_report', '=', true)->paginate($this->perPage); 


    return $this->sendResponse($employers); 
} 
+1

Post einige Code als Start! teilen Sie, was Sie bereits versucht haben, wird es helfen –

Antwort

2

Im Fall, dass Sie mit accesors arbeiten möchten, könnten Sie durch die Sammlung iterieren, nachdem Sie Ihre Anfrage bekommen, so etwas wie folgt aus:

$result = Model::get()->filter(function($item) { 
    return $item->require_to_report === true; 
}); 

Hier haben Sie alle Datensätze des Modells und dann könnten Sie eine manuelle pag erstellen inator:

$paginator = new Illuminate\Pagination\Paginator($result, 10); 

Sie mit diesem Ansatz haben eine Schwäche, wenn Sie zu viele Datensätze haben, könnte die Leistung beeinträchtigt werden.

+0

außer Sie können das nicht tun, wenn 'foo' ist ein benutzerdefiniertes Attribut –

+0

was meinst du mit benutzerdefinierten Attribut? 'foo' ist ein Attribut von' Model' @BillGarrison –

+0

Ich entschuldige mich .... ich nenne sie benutzerdefinierte Attribute, aber Laravel nennt sie Accessoren https://laravel.com/docs/5.2/eloquent-mutators#accessors-and-mutators –