是VS Code的扩展有问题,还是Laravel本身的问题?

后端开发 2026-07-09

我正在使用Laravel 13,在VS Code中使用PHP Intelephense扩展。

当在编写带有 where 子句的标准Eloquent查询时,我的IDE会用红色波浪线标注代码,并抛出以下错误:

参数不足。期望4 个参数。实际传入2 个。

以下是我控制器中的方法:

public function index(Request $request)
{
    return Exam::where('user_id', $request->user()->id)
        ->orderBy('exam_date', 'asc')
        ->get();
}

解决方案

我认为问题出在VS Code的扩展上。

如果你查看API文档,你会发现 where() 函数需要4 个参数。 https://api.laravel.com/docs/13.x/Illuminate/Database/Eloquent/Builder.html#method_where

然而,Laravel的文档也有如下说明。

为方便起见,如果你想验证某列是否等于给定值,可以将该值作为where方法的第二个参数传递。Laravel将假设你想使用 = 运算符

我认为官方的Laravel vscode扩展应该是这个:https://marketplace.visualstudio.com/items?itemName=laravel.vscode-laravel

备选方案

你正在调用一个静态 where 方法,因此这不是查询构建器的实例级where,如Tatachiblob错误地声称的那样。

Model 类没有 where 方法,但它能够处理不存在的静态方法,并将它们转换为查询构建器的实例级方法。不过,这个 __callStatic 只接受两个参数,因此你传入的四个参数会因为在实际的查询构建器中可以工作而在这个静态调用中失败。

    /**
     * Handle dynamic static method calls into the model.
     *
     * @param  string  $method
     * @param  array  $parameters
     * @return mixed
     */
    public static function __callStatic($method, $parameters)
    {
        if (static::isScopeMethodWithAttribute($method)) {
            return static::query()->$method(...$parameters);
        }

        return (new static)->$method(...$parameters);
    }

这就是修复它的方法:

public function index(Request $request)
{
    return Exam::query()->where('user_id', $request->user()->id)
        ->orderBy('exam_date', 'asc')
        ->get();
}

或者你也可以在你的 Exam 类中加入一个带四个参数的 __callStatic 以处理这个问题。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章