Файл: vendor/laravel/framework/src/Illuminate/Http/Resources/JsonApi/RelationResolver.php
Строк: 78
<?php
namespace IlluminateHttpResourcesJsonApi;
use Closure;
use IlluminateDatabaseEloquentCollection;
use IlluminateDatabaseEloquentModel;
/**
* @internal
*/
class RelationResolver
{
/**
* The relation resolver.
*
* @var Closure(mixed):(IlluminateDatabaseEloquentCollection|IlluminateDatabaseEloquentModel|null)
*/
public Closure $relationResolver;
/**
* The relation resource class.
*
* @var class-string<IlluminateHttpResourcesJsonApiJsonApiResource>|null
*/
public ?string $relationResourceClass = null;
/**
* Construct a new resource relationship resolver.
*
* @param Closure(mixed):(IlluminateDatabaseEloquentCollection|IlluminateDatabaseEloquentModel|null)|class-string<IlluminateHttpResourcesJsonApiJsonApiResource>|null $resolver
*/
public function __construct(public string $relationName, Closure|string|null $resolver = null)
{
$this->relationResolver = match (true) {
$resolver instanceof Closure => $resolver,
default => fn ($resource) => $resource->getRelation($this->relationName),
};
if (is_string($resolver) && class_exists($resolver)) {
$this->relationResourceClass = $resolver;
}
}
/**
* Resolve the relation for a resource.
*/
public function handle(mixed $resource): Collection|Model|null
{
return value($this->relationResolver, $resource);
}
/**
* Get the resource class.
*
* @return class-string<IlluminateHttpResourcesJsonApiJsonApiResource>|null
*/
public function resourceClass(): ?string
{
return $this->relationResourceClass;
}
}