You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel缓存集合filter报错:参数需为可调用类型而非数组

正确实现Laravel缓存集合的地址过滤方法

错误原因很明确:Collection::filter()方法要求传入回调函数,但你直接传了request(['search'])这个数组,所以类型不匹配报错。以下是具体解决步骤:

  1. 获取搜索关键词
    先从请求中取出搜索参数,同时处理参数为空的情况:

    $searchTerm = request()->get('search', '');
    
  2. 对缓存集合执行过滤
    使用filter()传入回调函数,检查每个Property模型的地址字段是否包含搜索关键词(这里假设地址字段名为address,请根据实际字段调整):

    $filteredDuplex = $searchTerm 
        ? $duplex->filter(function ($property) use ($searchTerm) {
            // 忽略大小写匹配,提升用户体验
            return str_contains(strtolower($property->address), strtolower($searchTerm));
        })
        : $duplex; // 无搜索词时返回原缓存集合
    
  3. 处理带搜索参数的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 05:24:51