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

Laravel 8报错:Array callback must have exactly two elements 求助

问题解决:Laravel 8 "Array callback must have exactly two elements" 错误

错误根源

你的代码存在两个核心问题:

  1. 数组取值语法错误:误将数组$filters当作函数调用,使用了$filters('search'),正确的数组取值方式应为$filters['search']。
  2. 查询作用域命名不规范:Laravel的查询作用域方法必须以scope开头,否则框架会错误地将其解析为回调数组,触发"Array callback must have exactly two elements"错误。

修正后的代码

模型代码(Post.php)

// 方法名必须以scope开头,定义为查询作用域
public function scopeFilter($query, $filters)
{
    // 简洁判断search参数是否存在且非空
    if ($search = $filters['search'] ?? false) {
        $query->where('title', 'like', '%' . $search . '%')
              ->orWhere('body', 'like', '%' . $search . '%');
    }
}

注:原代码中的tittle是拼写错误,应改为title,避免后续出现字段不存在的异常。

控制器代码

"posts" => Post::latest()->filter(request(['search']))->get()

这段代码逻辑正确,无需修改。

额外说明

  • Laravel查询作用域用于封装可复用的查询逻辑,方法名必须遵循scopeXXX的命名规则,调用时只需写XXX(...)(例如这里的filter(...)对应scopeFilter)。
  • 使用$filters['search'] ?? false是PHP 7+的空合并运算符,相比isset写法更简洁安全,可同时判断键是否存在且值不为空。

内容的提问来源于stack exchange,提问作者Tommy Ferdian Hadimarta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:48:23