0

我正在使用集合过滤数据。但我需要使用类似的方法。我曾尝试这样写:('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;
}
4

1 回答 1

8

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

但是假设您真的想使用 Support 集合进行过滤,那么 LIKE 没有任何地方,因为您只是在过滤一个数组。如果您想使用类似于 like 而不是:

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

您可以使用:

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

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

于 2017-11-21T17:58:02.923 回答