Laravel 5.5 Collection 哪里喜欢

Laravel 5.5 Collection where like

我正在使用 collections 过滤数据。但我需要使用类似的方法。我曾尝试这样写:('name', 'LIKE', '%value%') 但它没有用。

这是我的方法:

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

第一个问题是你是否真的知道自己在做什么。如果你从数据库中获取数据,然后过滤它只是为了获取一些元素,那绝对不是最好的方法,因为你可以从数据库中获取例如 100000 条记录,但最终只有 2 个元素,这会降低你的应用程序性能。

但假设您真的想使用支持 collection 进行过滤,则没有 where 和 LIKE 一起使用,因为您只是在过滤一个数组。如果你想使用类似于 like 的东西而不是:

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

您可以使用:

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

根据您在 collection 中的实际情况,您可能需要使用 $element['name']

而不是 $element->name