diff --git a/src/Laravel/Eloquent/Serializer/Mapping/Loader/RelationMetadataLoader.php b/src/Laravel/Eloquent/Serializer/Mapping/Loader/RelationMetadataLoader.php index 30915eb424c..8a7339025e8 100644 --- a/src/Laravel/Eloquent/Serializer/Mapping/Loader/RelationMetadataLoader.php +++ b/src/Laravel/Eloquent/Serializer/Mapping/Loader/RelationMetadataLoader.php @@ -42,6 +42,10 @@ public function loadClassMetadata(ClassMetadataInterface $classMetadata): bool } $refl = $classMetadata->getReflectionClass(); + if ($refl->isAbstract()) { + return false; + } + /** @var Model */ $model = $refl->newInstanceWithoutConstructor(); $attributesMetadata = $classMetadata->getAttributesMetadata(); diff --git a/src/Laravel/Tests/Eloquent/Serializer/Mapping/Loader/RelationMetadataLoaderTest.php b/src/Laravel/Tests/Eloquent/Serializer/Mapping/Loader/RelationMetadataLoaderTest.php new file mode 100644 index 00000000000..8193cd1981f --- /dev/null +++ b/src/Laravel/Tests/Eloquent/Serializer/Mapping/Loader/RelationMetadataLoaderTest.php @@ -0,0 +1,35 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace ApiPlatform\Laravel\Tests\Eloquent\Serializer\Mapping\Loader; + +use ApiPlatform\Laravel\Eloquent\Metadata\ModelMetadata; +use ApiPlatform\Laravel\Eloquent\Serializer\Mapping\Loader\RelationMetadataLoader; +use Orchestra\Testbench\TestCase; +use Symfony\Component\Serializer\Mapping\ClassMetadata; +use Workbench\App\Models\AbstractModel; + +class RelationMetadataLoaderTest extends TestCase +{ + /** + * @see https://github.com/api-platform/core/issues/7911 + */ + public function testLoadClassMetadataReturnsFalseForAbstractModelWithoutInstantiating(): void + { + $loader = new RelationMetadataLoader(new ModelMetadata()); + + $result = $loader->loadClassMetadata(new ClassMetadata(AbstractModel::class)); + + $this->assertFalse($result); + } +} diff --git a/src/Laravel/workbench/app/Models/AbstractModel.php b/src/Laravel/workbench/app/Models/AbstractModel.php new file mode 100644 index 00000000000..0ed3d765c8f --- /dev/null +++ b/src/Laravel/workbench/app/Models/AbstractModel.php @@ -0,0 +1,20 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Workbench\App\Models; + +use Illuminate\Database\Eloquent\Model; + +abstract class AbstractModel extends Model +{ +}