在资源文件app/Http/Resources/PostResource.php中,我使用方法:
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class PostResource extends JsonResource
{
public function toArray($request)
{
$data = [
'id' => $this->id,
...
'mediaProp'=> $this->when($this->relationLoaded('mediaProp'), new MediaPropResource($this->mediaProp)),
];
但是我在运行larastan命令时出错了:
调用未定义的方法App\Http\Resources\PostResource::relationLoaded()
我将PostResource类添加到phpstan. neon 中universalObjectCratesClasses键下:
includes:
- ./vendor/nunomaduro/larastan/extension.neon
parameters:
universalObjectCratesClasses:
- Illuminate\Http\Resources\Json\JsonResource
- App\Http\Resources\PostResource
paths:
- app/
# Level 9 is the highest level
level: 5
# ignoreErrors:
# - '#PHPDoc tag @var#'
#
# excludePaths:
# - ./*/*/FileToBeExcluded.php
#
# checkMissingIterableValueType: false
但这并没有帮助,我仍然得到了同样的错误。我该如何解决?
"laravel/framework": "^10.8",
"nunomaduro/larastan": "^2.0",
提前感谢!
2条答案
按热度按时间qqrboqgw1#
relationLoaded
是Laravel的HasRelationships
trait中定义的方法。但是PHPStan不知道资源和模型之间的关系。因此,您需要向资源类添加@mixin
注解。就像这样:当然,要根据您的用例调整模型名称空间。
rbl8hiat2#
这很有趣,因为在我的代码中有一个代码片段与你的代码相似:
我用
"nunomaduro/larastan": "^2.6.4"
。它也没有给予我任何错误。也许你只需要升级包。或者,如果你想忽略它,你可以在ExcreErrors设置下写一个正则表达式,如下所示: