1

我正在使用 Larastan 来消除我在代码库中发生的一些静态分析错误。我有几个涉及 Eloquent 高阶消息传递代理的错误,称为orWhere.

我正在使用这种方法,如下所示。

ModelA::query()->scopeOne()->orWhere->scopeTwo()->get();

在查看了 Larastan 存储库后,我偶然发现了为解决此问题而提出的这个问题以及合并的拉取请求。

问题

拉取请求

我目前有dev-masterLarastan 的版本,并已检查以确保 Builder 类作为它内部的 orWhere 的属性读取。

当我在包含 orWhere 高阶消息代理的文件上运行 phpstan 时,它给了我以下错误。

23     Call to an undefined method Illuminate\Database\Eloquent\Builder<App\Models\ModelA>::scope2().  

模型A

<?php

namespace App\Models;

use App\Builders\ModelQueryBuilder;

class ModelA extends ParentModel 
{
    /**
     * Create a new Eloquent query builder for the model.
     *
     * @param  \Illuminate\Database\Query\Builder  $query
     * @return \App\Builders\ModelAQueryBuilder<\App\Models\ModelA>
     */
    public function newEloquentBuilder($query)
    {
        return new ModelABuilder($query);
    }
}
<?php

namespace App\Builders;

/**
 * @template TModelClass of \App\Models\ModelA
 * @extends ParentMemberQueryBuilder<TModelClass>
 */
class ModelAQueryBuilder extends ParentMemberQueryBuilder
{
    /**
     * @return \App\Builders\ModelAQueryBuilder
     */
    public function scopeOne()
    {
        return $this->whateverConstraints();
    }
}
<?php

namespace App\Builders;

/**
 * @template TModelClass of \App\Models\ParentMember
 * @extends GrandparentQueryBuilder<TModelClass>
 */
class ParentMemberQueryBuilder extends GrandparentMemberQueryBuilder
{
}
<?php

namespace App\Builders;

use Illuminate\Database\Eloquent\Builder;

/**
 * @template TModelClass of \App\Models\GrandParent
 * @extends Builder<TModelClass>
 */
class GrandparentMemberQueryBuilder extends Builder
{
    /**
     * @return \App\Builders\GrandparentQueryBuilder
     */
    public function scopeTwo()
    {
        return $this->whereConstraints();
    }
}

4

0 回答 0