2017-05-22 18 views
4

私はコレクションが好きな場所をサポートしていないことを知っていますが、どうすればこれを実現できますか?コレクションWhere LIKE Laravel 5.4

私のデータは次のとおりです。 enter image description here

collect($products)->where('name', 'LIKE', '%'. $productName . '%'); 

Laravelのようなコレクションではサポートされていません。私は使用することを考えている

collect($products)->filter(function() use ($productName) { 

      return preg_match(pattern, subject); 
     }) 

しかし、私はそれを行う方法がわかりません。 TY

答えて

5

あなたはこれを行うことができます:

collect($products)->filter(function ($item) use ($productName) { 
    // replace stristr with your choice of matching function 
    return false !== stristr($item->name, $productName)) 
) 

ちょうどするpreg_matchとstristrか、これまでどのようなあなたが好きに取って代わります。

これは、元の構造から、一致しないアイテムを除いたコレクションを返します。

+0

ええ、ありがとう... – Rbex

0

もう1つの方法は、すべてのアイテムを取得してからフィルタリングするのではなく、データベースを照会するとき(最初にコレクションを取得する)にWHERE LIKE句を追加することです。例えば

$products = Product::where('name', 'like', '%match%')->get(); 

それでもデータベースとSQL(および未収集)を扱っているので、動作します。

+1

彼はコレクションを扱っています。最悪の場合は、すべてを繰り返して結果を一致させることです。 – Farveaz

関連する問題