Laravel缓存集合filter报错:参数需为可调用类型而非数组
正确实现Laravel缓存集合的地址过滤方法
错误原因很明确:Collection::filter()方法要求传入回调函数,但你直接传了request(['search'])这个数组,所以类型不匹配报错。以下是具体解决步骤:
获取搜索关键词
先从请求中取出搜索参数,同时处理参数为空的情况:$searchTerm = request()->get('search', '');对缓存集合执行过滤
使用filter()传入回调函数,检查每个Property模型的地址字段是否包含搜索关键词(这里假设地址字段名为address,请根据实际字段调整):$filteredDuplex = $searchTerm ? $duplex->filter(function ($property) use ($searchTerm) { // 忽略大小写匹配,提升用户体验 return str_contains(strtolower($property->address), strtolower($searchTerm)); }) : $duplex; // 无搜索词时返回原缓存集合处理带搜索参数的URL(如分页)
如果需要在视图中生成保留搜索参数的链接(比如分页按钮),withQueryString()是用于URL实例的方法,不是集合的方法。示例:{{ route('properties.index', ['page' => 2])->withQueryString() }}或者在分页时,先把过滤后的集合转为分页实例:
$perPage = 10; $page = request()->get('page', 1); $paginatedDuplex = new \Illuminate\Pagination\LengthAwarePaginator( $filteredDuplex->forPage($page, $perPage), $filteredDuplex->count(), $perPage, $page, ['path' => request()->url(), 'query' => request()->query()] );之后在视图中使用分页链接时,自动会带上搜索参数。
内容的提问来源于stack exchange,提问作者Stephen
相关产品推荐
相关产品推荐

