Laravel 5.5 Collection喜欢的地方

Nev*_*ore 0 php collections laravel-5 laravel-collection laravel-5.5

我正在使用集合过滤数据.但我需要使用类似的方法.我曾试图这样写:('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;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*łek 7

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

但假设您确实希望使用支持集合进行过滤,那么LIKE就不会与您一起过滤,因为您只是过滤数组.如果你想使用类似于喜欢的东西而不是:

$collection = $collection->where('name', $value);
Run Code Online (Sandbox Code Playgroud)

您可以使用:

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

取决于你在集合中真正拥有的东西而不是$element->name你可能需要使用的东西$element['name']