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
我正在使用 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