2017-01-15 7 views
0

私はアイテムをフィルタリングするためのフォームがあります。Laravelの配列を特徴とする()

filter

を、私はLaravel 5.3でこれに似た何かを探しています:

// some variables get from request()->input('...') 
$mode = ['A']; 
$type = ['a', 'b']; 
$group = [0, 1]; 

// desirable query 
$results = Item::whereIn([ 
    ['mode_id', $mode], 
    ['type_id', $type], 
    ['group_id', $group] 
])->paginate(10); 

私はこれを行うことができます

$results = Item::whereIn('mode_id', $mode) 
       ->whereIn('type_id', $type) 
       ->whereIn('group_id', $group) 
       ->paginate(10); 

しかし、それは動的な方法ではありません。たとえば、ユーザーがモードで何も選択しなかった場合、クエリは空の配列を返します。

答えて

0

我々はconditional clausesを使用することができます。

$results = Item:: 
    when(!empty($mode), function ($query) use ($mode) { 
     return $query->where('mode_id', $mode); 
    }) 
    ->when(!empty($type), function ($query) use ($type) { 
     return $query->where('type_id', $type); 
    }) 
    ->when(!empty($group), function ($query) use ($group) { 
     return $query->where('group_id', $group); 
    }) 
    ->paginate(10); 
1

あなたは行うことができます。

$qb = Item::newQuery(); 

if (!empty($mode)) 
{ 
    $qb->whereIn('mode_id', $mode); 
} 

if (!empty($type)) 
{ 
    $qb->whereIn('type_id', $type); 
} 

if (!empty($group)) 
{ 
    $qb->whereIn('group_id', $group); 
} 

$results = $qb->paginate(10); 

か、それを渡す前だここで、w/oの空のご請求項連想配列を構築します。