收集LIKE Laravel 5.4

时间:2017-05-22 02:17:10

标签: laravel

我知道收藏不支持LIKE,但我怎样才能实现这一点。

我的数据是: enter image description here

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

Laravel不支持集合中的位置。我正在考虑使用

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

            return preg_match(pattern, subject);
        })

但我不知道该怎么做。 TY

2 个答案:

答案 0 :(得分:20)

在集合上,您可以使用filter($callback_function)方法选择集合中的项目。传入一个回调函数,该函数为每个应该返回的项返回true

在您的情况下,您可以使用stristr()函数模拟LIKE运算符,如下所示:

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

只需将stristr替换为preg_match或您需要匹配字符串。

这将返回原始结构中的集合减去不匹配的项目。

答案 1 :(得分:-3)

另一个选择是在您查询数据库(首先获取集合)时添加WHERE LIKE子句,而不是获取所有项目然后过滤掉。

例如:

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

既然你还在处理数据库和SQL(还没有集合),那就行了。