Laravel Sail 中的雄辩自动完成功能

问题描述 投票:0回答:1

嗯,我在 Laravel Sail 中有一个使用 Docker 和 VS Code 的项目。例如,当我键入“User::where()”时,此“where”不会显示为自动完成建议。对于这个方法和其他 Eloquent 方法,你有解决方案吗?

我尝试安装几个 PHP 和 Laravel 扩展,但很多都给出了“我找不到 php 命令”的问题(我认为这是因为我处于 doket 环境中或在 Windows 上使用 WSL)或者根本没有安装解决问题。

laravel eloquent laravel-sail
1个回答
0
投票

TLDR: 如果您改为

User::query()->where()
,则可以使 IDE 的自动完成功能正常工作。

详情:

如果按照运行代码的运行时流程

User::where()

用户扩展了类

\Illuminate\Database\Eloquent\Model

这个类没有静态方法

where()
所以代码落在魔术方法上
__callStatic()

public static function __callStatic($method, $parameters)
{
    return (new static)->$method(...$parameters);
}

它试图调用非静态方法

where()
,但它不存在,所以它落在魔术方法上
__call()

public function __call($method, $parameters)
{
    if (in_array($method, ['increment', 'decrement', 'incrementQuietly', 'decrementQuietly'])) {
        return $this->$method(...$parameters);
    }

    if ($resolver = $this->relationResolver(static::class, $method)) {
        return $resolver($this);
    }

    if (Str::startsWith($method, 'through') &&
        method_exists($this, $relationMethod = Str::of($method)->after('through')->lcfirst()->toString())) {
        return $this->through($relationMethod);
    }

    return $this->forwardCallTo($this->newQuery(), $method, $parameters);
}

最终运行

$this->forwardCallTo($this->newQuery(), $method, $parameters)

方法

newQuery()
返回一个
\Illuminate\Database\Eloquent\Builder
,其中包含非静态方法
where()
,一切都从这里继续。

雄辩模型中存在一个静态方法,它会跳过所有魔术方法并返回一个构建器。

public static function query()
{
    return (new static)->newQuery();
}

因此,为了让您的 IDE 了解您正在使用构建器,请首先使用代码

User::query()
,您将获得提示并自动完成 enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.