2016-07-08 20 views
1

Was ist der beste Weg, um die Artikel Filterfunktion zu implementieren?Artikel Filter Laravel eloquent

Ich habe eine Tabelle mit einigen Elementen, und jedes Element hat einige Felder.

Wie kann ich Elemente mit Feldern filtern, wie E-Commerce-Filter, mit Laravel 5 und Eloquent auswählen?

+0

Bitte beachten Sie mit dem Punkt beenden Sätze, Fragezeichen am Ende einer Frage, und Großbuchstaben am Anfang eines neuen Satzes. – trincot

+0

Ja, mein Fehler. Entschuldigen. – aGoodRussianGuy

+0

Warum haben Sie Ihre Frage nicht bearbeitet? Ich habe es jetzt für dich bearbeitet. – trincot

Antwort

1

Ich habe immer eloquent Bereiche filtern eloquent Ergebnisse verwendet: https://laravel.com/docs/5.1/eloquent#query-scopes

Ihr Controller:

use App\Item; 

class ItemController extends Controller 
{ 
    public function index(Request $request) 
    { 
     $items = Item::name($request->name)->price($request->price)->paginate(25); 

     return view('items.index', compact('items')); 
    } 
} 

Ihr Modell:

class Item extends Model 
{ 
    public function scopeName($query, $name) 
    { 
     if (!is_null($name)) { 
      return $query->where('name', 'like', '%'.$name.'%'); 
     } 

     return $query; 
    } 

    public function scopePrice($query, $price) 
    { 
     if (!is_null($price)) { 
      return $query->where(compact('price')); 
     } 

     return $query; 
    } 
} 

Ihre Ansicht:

In Ihren Bereichen können Sie prüfen, ob der angegebene Wert null ist, bevor Sie die Abfrageergebnisse einschränken. Dadurch können Benutzer paginierte Ergebnisse effektiv suchen und filtern.

+0

Okay, danke, ich werde es versuchen. – aGoodRussianGuy

+0

bro, zeigt es nur das Ergebnis, wenn Eingabefeld des Preises und des Namens die korrekte Eingabe mit der Datenbank sind, ist das möglich, wie OR zu filtern, kann Eingabe nur Name oder Preis sein, thats warum, können Sie mir ein geben Kurzanleitung –

1

Ich schrieb gerade ein Paket für diese hier: https://github.com/Tucker-Eric/EloquentFilter

Es Sie so etwas wie zu tun erlaubt:

use App\Item; 

class ItemController extends Controller 
{ 
    public function index(Request $request) 
    { 
     $items = Item::filter($request->all())->paginateFilter(25); 

     return view('items.index', compact('items')); 
    } 
}