Larastan在升级到Laravel 10后抱怨收集方法参数

ddrv8njm  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(110)

升级到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个新错误,其中大部分与此类似,与mapreduce等收集方法有关。
快速的解决方案是使用临时变量并添加类型提示:

/** @var Collection<Article> $articles */
$articles = $this->articleRepository
    ->getDefaultArticles($organizationId)
    ->toBase();


但我不想重复100次,甚至IDE也抱怨说这是不必要的
x1c 0d1x的数据
提前感谢您的帮助!

nnvyjq4y

nnvyjq4y1#

而不是处理PHPStan,我发现它奇怪的是你在这里调用toBase()toBase()可将雄辩系列转换为Laravel系列。
Laravel默认情况下已经做了类似的事情,Eloquent Collections称之为此处所示的::map()的父级。虽然toArray()没有特定的实现,但toBase()调用是不必要的,它可以避免typehint的麻烦。
如果你想修复Larastan。如错误所述,您缺少第二个map()参数。将其更改为该值可能有助于修复Larastan错误。

->map(function (Article $article, int $key) {

字符串

相关问题