2016-07-08 4 views
1

アイテムフィルタ機能を実装する最適な方法は何ですか?アイテムフィルタの朗読

私はいくつかの項目を持つテーブルを持っており、各項目はいくつかのフィールドを持っています。

Laravel 5とEloquentを使用して、電子商取引フィルタリングのようなフィールドフィルタリングを持つアイテムを選択するにはどうすればよいですか?私はいつも雄弁結果をフィルタリングするために説得力のスコープを使用しました

+0

を文章を完了するためにポイントを使用することを検討してください、質問は、質問の最後にマーク新しい句の開始時に大文字と小文字が使用されます。 – trincot

+0

ええ、私の間違い。謝罪する – aGoodRussianGuy

+0

なぜあなたはあなたの質問を編集しませんでしたか?私は今あなたのためにそれを編集しました。 – trincot

答えて

1

https://laravel.com/docs/5.1/eloquent#query-scopes

あなたのコントローラー:

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')); 
    } 
} 

あなたのモデル:

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

ビュー:

<form action="{{ route('items.index') }}" method="get"> 
    <input type="text" name="price" /> 
    <input type="text" name="name" /> 
    <input type="submit" value="Search"> 
</form> 

@foreach($items as $item) 
    {{ $item->name }} 
@endforeach 

{!! $items->render() !!} 

スコープでは、クエリ結果を制限する前に、指定された値がnullかどうかを確認できます。これにより、効果的にページングされた結果を検索してフィルタリングすることができます。

+0

よろしくお願いいたします。 – aGoodRussianGuy

+0

broは、価格と名前の入力フィールドがデータベースの正しい入力である場合の結果のみを表示します。ORのようにフィルタリングすることができます。入力は名前のみまたは価格のみにすることができます。クイックガイド –

1

私はここに、まさにこのためのパッケージを書いた:https://github.com/Tucker-Eric/EloquentFilter

をそれはあなたのような何かをすることができます:

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')); 
    } 
} 
関連する問題