2017-11-21 12 views
0

私はコレクションを使用してデータをフィルタリングしています。しかし、私は同じような方法を使用する必要があります。私はこのように書こうとしました:('name', 'LIKE', '%value%')しかし、それは動作しませんでした。Laravel 5.5 Collection where like

protected function filterData(Collection $collection, $transformer) { 
    foreach (request()->query() as $query => $value) { 
     $attribute = $transformer::originalAttribute($query); 

     if (isset($attribute, $value)) { 
      $collection = $collection->where($attribute, $value); 
     } 
    } 

    return $collection; 
} 

答えて

2

第一の質問は、あなたが本当にあなたが何をしているか知っているかどうかです:

は、ここに私の方法です。データベースからデータを取り込んでフィルタリングしていくつかの要素を取り除くと、それは最良の方法ではありません。データベースから例えば100000レコードを取り出して最終的に2つの要素しか持たないため、アプリケーションのパフォーマンスが低下するからです。

しかし、サポートコレクションを使用して実際にフィルタリングしたいと仮定すると、配列をフィルタリングするだけなので、LIKEと一緒にどこにも存在しません。あなたの代わりに好きに類似したものを使用したい場合:

$collection = $collection->where('name', $value); 

あなたが使用することができます:あなたは本当に代わりに$element->nameのコレクションを持っているものに応じて

$collection = $collection->reject(function($element) use ($value) { 
    return mb_strpos($element->name, $value) === false; 
}); 

をあなたが使用する必要があります$element['name']

+0

私はlaravelに新しいです、私は以前はコレクションを使用していません。通常、私はいつもデータベースレイヤーでこれらの操作を行います。コレクションを使用してパフォーマンスを向上させるには、操作が適切な場所はどこですか?私はデータベース層で "LIKE"をしていますか? – Nevermore

0

のようなは、次のようになります。

$collection= $collection->where('name', 'LIKE',$value)->get();