升级到Laravel 10后,我遇到了Larastan错误。
下面的代码直到1小时前都很好:
return $this->articleRepository->getDefaultArticles($organizationId)
->toBase()
->map(function (Article $article) {
return new Content(
$article->id,
$article->title,
$article->language,
);
})
->toArray();
字符串
现在给我以下错误:
方法Illuminate\Support\Collection的参数#1 $callback <(int| string),Illuminate\Database\Eloquent\Model>::map()要求可调用(Illuminate\Database\Eloquent\Model,int| string):App\Academy\Content,
关闭(应用程序\型号\文章):App\Academy\提供的内容
存储库方法具有正确的提示:
/**
* @return Collection<Article>
*/
public function getDefaultArticles(OrganizationId $organizationId): Collection
{
/** @var Collection<Article> */
return Article::query()
->where('organization_id', $organizationId)
->get()
->keyBy('id')
->values();
}
型
它给了我115个新错误,其中大部分与此类似,与map
和reduce
等收集方法有关。
快速的解决方案是使用临时变量并添加类型提示:
/** @var Collection<Article> $articles */
$articles = $this->articleRepository
->getDefaultArticles($organizationId)
->toBase();
型
但我不想重复100次,甚至IDE也抱怨说这是不必要的
x1c 0d1x的数据
提前感谢您的帮助!
1条答案
按热度按时间nnvyjq4y1#
而不是处理
PHPStan
,我发现它奇怪的是你在这里调用toBase()
。toBase()
可将雄辩系列转换为Laravel系列。Laravel
默认情况下已经做了类似的事情,Eloquent Collections称之为此处所示的::map()
的父级。虽然toArray()
没有特定的实现,但toBase()
调用是不必要的,它可以避免typehint的麻烦。如果你想修复
Larastan
。如错误所述,您缺少第二个map()
参数。将其更改为该值可能有助于修复Larastan错误。字符串