Fab*_*sso 5 php laravel phpstan laravel-10
升级到 Laravel 10 后,我遇到了 Larastan 错误的困难时期。
下面的代码在 1 小时前还完全正常:
return $this->articleRepository->getDefaultArticles($organizationId)
->toBase()
->map(function (Article $article) {
return new Content(
$article->id,
$article->title,
$article->language,
);
})
->toArray();
Run Code Online (Sandbox Code Playgroud)
现在给我以下错误:
方法 Illuminate\Support\Collection<(int|string),Illuminate\Database\Eloquent\Model>::map() 的参数 #1 $callback 需要 callable(Illuminate\Database\Eloquent\Model, int|string): App\学院\内容,
关闭(应用程序\模型\文章):给出的应用程序\学院\内容
存储库方法有正确的提示:
/**
* @return Collection<Article>
*/
public function getDefaultArticles(OrganizationId $organizationId): Collection
{
/** @var Collection<Article> */
return Article::query()
->where('organization_id', $organizationId)
->get()
->keyBy('id')
->values();
}
Run Code Online (Sandbox Code Playgroud)
它给了我 115 个新错误,其中大多数与此类似,与map和等收集方法相关reduce。
快速解决方案是使用临时变量并添加类型提示:
/** @var Collection<Article> $articles */
$articles = $this->articleRepository
->getDefaultArticles($organizationId)
->toBase();
Run Code Online (Sandbox Code Playgroud)
但我不想执行 100 次,甚至 IDE 也抱怨这是不必要的
预先感谢您的帮助!
到目前为止,我发现的唯一解决方法是通过类型提示分两步完成。
/** @var \Illuminate\Support\Collection $result */
$result = $this->articleRepository->getDefaultArticles($organizationId);
return $result->map(function (Article $article) {
return new Content(
$article->id,
$article->title,
$article->language,
);
})
->toArray();
Run Code Online (Sandbox Code Playgroud)
它对于处理 115 个新错误并没有真正的帮助。但如果你有几个错误,它会有所帮助。