我正在使用 Larastan 来消除我在代码库中发生的一些静态分析错误。我有几个涉及 Eloquent 高阶消息传递代理的错误,称为orWhere
.
我正在使用这种方法,如下所示。
ModelA::query()->scopeOne()->orWhere->scopeTwo()->get();
在查看了 Larastan 存储库后,我偶然发现了为解决此问题而提出的这个问题以及合并的拉取请求。
我目前有dev-master
Larastan 的版本,并已检查以确保 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();
}
}