From 00a9f166d8c2d702f2c184429766813ececdf888 Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Wed, 6 Aug 2025 15:54:43 -0600 Subject: [PATCH 01/31] Update composer.json --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 99f2c25..ae693b1 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,7 @@ "require": { "php": "^7.2|^8.0", "doctrine/dbal": "^2.10|^3.3", - "doctrine/orm": "^2.6", + "doctrine/orm": "^3.1", "doctrine/inflector": "^1.4|^2.0", "doctrine/persistence": "^1.3.5|^2.0|^3.0" }, From eebb0b94a353f68674590e5d06679b3efca15ea1 Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Wed, 6 Aug 2025 15:54:54 -0600 Subject: [PATCH 02/31] ClassMetadata update --- src/Builders/Entity.php | 6 +++--- src/Builders/Field.php | 4 ++-- src/Builders/GeneratedValue.php | 8 ++++---- src/Builders/Inheritance/Inheritance.php | 6 +++--- src/Builders/Overrides/AssociationOverride.php | 8 ++++---- src/Builders/Overrides/AttributeOverride.php | 4 ++-- src/Extensions/Gedmo/Sluggable.php | 6 +++--- src/Relations/AssociationCache.php | 8 ++++---- tests/Builders/BuilderTest.php | 4 ++-- tests/Builders/EmbeddedTest.php | 4 ++-- tests/Builders/EntityListenersTest.php | 4 ++-- tests/Builders/EntityTest.php | 10 +++++----- tests/Builders/FieldTest.php | 10 +++++----- tests/Builders/GeneratedValueTest.php | 6 +++--- tests/Builders/IndexTest.php | 4 ++-- .../Inheritance/InheritanceFactoryTest.php | 4 ++-- .../Inheritance/JoinedTableInheritanceTest.php | 4 ++-- .../Inheritance/SingleTableInheritanceTest.php | 4 ++-- tests/Builders/LifecycleEventsTest.php | 4 ++-- .../Overrides/AssociationOverrideTest.php | 4 ++-- .../Overrides/AttributeOverrideTest.php | 4 ++-- .../Overrides/OverrideBuilderFactoryTest.php | 8 ++++---- tests/Builders/Overrides/OverrideTest.php | 6 +++--- tests/Builders/PrimaryTest.php | 4 ++-- tests/Builders/TableTest.php | 4 ++-- tests/Builders/UniqueConstraintTest.php | 4 ++-- tests/FluentDriverTest.php | 18 +++++++++--------- tests/Mappers/EmbeddableMapperTest.php | 4 ++-- tests/Mappers/EntityMapperTest.php | 4 ++-- tests/Mappers/MappedSuperClassMapperTest.php | 4 ++-- tests/Relations/ManyToManyTest.php | 4 ++-- tests/Relations/ManyToOneTest.php | 4 ++-- tests/Relations/OneToManyTest.php | 4 ++-- tests/Relations/OneToOneTest.php | 4 ++-- 34 files changed, 94 insertions(+), 94 deletions(-) diff --git a/src/Builders/Entity.php b/src/Builders/Entity.php index af1703d..9573c3e 100644 --- a/src/Builders/Entity.php +++ b/src/Builders/Entity.php @@ -2,7 +2,7 @@ namespace LaravelDoctrine\Fluent\Builders; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use LaravelDoctrine\Fluent\Builders\Traits\Macroable; use LaravelDoctrine\Fluent\Builders\Traits\Queueable; use LaravelDoctrine\Fluent\Builders\Traits\QueuesMacros; @@ -42,7 +42,7 @@ public function readOnly() * Depending on the cache mode selected, you may also need to configure * lock modes. * - * @param int $usage Cache mode. use ClassMetadataInfo::CACHE_USAGE_* constants. + * @param int $usage Cache mode. use ClassMetadata::CACHE_USAGE_* constants. * Defaults to READ_ONLY mode. * @param string|null $region The cache region to be used. Doctrine will use a default region * for each entity, if none is provided. @@ -51,7 +51,7 @@ public function readOnly() * * @see http://doctrine-orm.readthedocs.org/en/latest/reference/second-level-cache.html */ - public function cacheable($usage = ClassMetadataInfo::CACHE_USAGE_READ_ONLY, $region = null) + public function cacheable($usage = ClassMetadata::CACHE_USAGE_READ_ONLY, $region = null) { $meta = $this->builder->getClassMetadata(); $meta->enableCache(compact('usage', $region === null ? [] : 'region')); diff --git a/src/Builders/Field.php b/src/Builders/Field.php index 537ba2c..33d70fc 100644 --- a/src/Builders/Field.php +++ b/src/Builders/Field.php @@ -6,7 +6,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\Builder\FieldBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Persistence\Mapping\ClassMetadata; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Traits\Macroable; @@ -58,7 +58,7 @@ class Field implements Buildable protected $metaDatabuilder; /** - * @var ClassMetadataInfo + * @var ClassMetadata */ protected $classMetadata; diff --git a/src/Builders/GeneratedValue.php b/src/Builders/GeneratedValue.php index 8cd8205..86b6efb 100644 --- a/src/Builders/GeneratedValue.php +++ b/src/Builders/GeneratedValue.php @@ -3,7 +3,7 @@ namespace LaravelDoctrine\Fluent\Builders; use Doctrine\ORM\Mapping\Builder\FieldBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use LaravelDoctrine\Fluent\Buildable; class GeneratedValue implements Buildable @@ -39,15 +39,15 @@ class GeneratedValue implements Buildable protected $generator; /** - * @var ClassMetadataInfo + * @var ClassMetadata */ protected $classMetadata; /** * @param FieldBuilder $builder - * @param ClassMetadataInfo $classMetadata + * @param ClassMetadata $classMetadata */ - public function __construct(FieldBuilder $builder, ClassMetadataInfo $classMetadata) + public function __construct(FieldBuilder $builder, ClassMetadata $classMetadata) { $this->builder = $builder; $this->classMetadata = $classMetadata; diff --git a/src/Builders/Inheritance/Inheritance.php b/src/Builders/Inheritance/Inheritance.php index 74c1ad1..3d1ec07 100644 --- a/src/Builders/Inheritance/Inheritance.php +++ b/src/Builders/Inheritance/Inheritance.php @@ -2,7 +2,7 @@ namespace LaravelDoctrine\Fluent\Builders\Inheritance; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; interface Inheritance { @@ -12,7 +12,7 @@ interface Inheritance * @link http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html#single-table-inheritance * Doctine documentation */ - const SINGLE = ClassMetadataInfo::INHERITANCE_TYPE_SINGLE_TABLE; + const SINGLE = ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE; /** * Set inheritance to joined table mode. @@ -20,7 +20,7 @@ interface Inheritance * @link http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html#class-table-inheritance * Doctine documentation */ - const JOINED = ClassMetadataInfo::INHERITANCE_TYPE_JOINED; + const JOINED = ClassMetadata::INHERITANCE_TYPE_JOINED; /** * Add the discriminator column. diff --git a/src/Builders/Overrides/AssociationOverride.php b/src/Builders/Overrides/AssociationOverride.php index 95f9544..866968f 100644 --- a/src/Builders/Overrides/AssociationOverride.php +++ b/src/Builders/Overrides/AssociationOverride.php @@ -3,7 +3,7 @@ namespace LaravelDoctrine\Fluent\Builders\Overrides; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\NamingStrategy; use InvalidArgumentException; use LaravelDoctrine\Fluent\Buildable; @@ -37,8 +37,8 @@ class AssociationOverride implements Buildable * @var array */ protected $relations = [ - ClassMetadataInfo::MANY_TO_ONE => ManyToOne::class, - ClassMetadataInfo::MANY_TO_MANY => ManyToMany::class, + ClassMetadata::MANY_TO_ONE => ManyToOne::class, + ClassMetadata::MANY_TO_MANY => ManyToMany::class, ]; /** @@ -143,7 +143,7 @@ protected function convertToMappingArray(ClassMetadataBuilder $builder) protected function newClassMetadataBuilder() { return new ClassMetadataBuilder( - new ClassMetadataInfo($this->builder->getClassMetadata()->name) + new ClassMetadata($this->builder->getClassMetadata()->name) ); } diff --git a/src/Builders/Overrides/AttributeOverride.php b/src/Builders/Overrides/AttributeOverride.php index 900e53c..56bdb23 100644 --- a/src/Builders/Overrides/AttributeOverride.php +++ b/src/Builders/Overrides/AttributeOverride.php @@ -3,7 +3,7 @@ namespace LaravelDoctrine\Fluent\Builders\Overrides; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\NamingStrategy; use InvalidArgumentException; use LaravelDoctrine\Fluent\Buildable; @@ -125,7 +125,7 @@ protected function convertToMappingArray(ClassMetadataBuilder $builder) protected function newClassMetadataBuilder() { return new ClassMetadataBuilder( - new ClassMetadataInfo($this->builder->getClassMetadata()->name) + new ClassMetadata($this->builder->getClassMetadata()->name) ); } diff --git a/src/Extensions/Gedmo/Sluggable.php b/src/Extensions/Gedmo/Sluggable.php index cbe05e8..a436ec0 100644 --- a/src/Extensions/Gedmo/Sluggable.php +++ b/src/Extensions/Gedmo/Sluggable.php @@ -2,7 +2,7 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Exception\InvalidArgumentException; use Gedmo\Sluggable\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; @@ -257,14 +257,14 @@ public function suffix($suffix) /** * Checks if $field type is valid as Sluggable field. * - * @param ClassMetadataInfo $meta + * @param ClassMetadata $meta * @param string $field * * @throws InvalidArgumentException * * @return bool */ - protected function isValidField(ClassMetadataInfo $meta, $field) + protected function isValidField(ClassMetadata $meta, $field) { $mapping = $meta->getFieldMapping($field); diff --git a/src/Relations/AssociationCache.php b/src/Relations/AssociationCache.php index e213edd..eecaa8e 100644 --- a/src/Relations/AssociationCache.php +++ b/src/Relations/AssociationCache.php @@ -2,7 +2,7 @@ namespace LaravelDoctrine\Fluent\Relations; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Persistence\Mapping\ClassMetadata; use InvalidArgumentException; use LaravelDoctrine\Fluent\Buildable; @@ -23,9 +23,9 @@ class AssociationCache implements Buildable * @var array */ protected $usages = [ - 'READ_ONLY' => ClassMetadataInfo::CACHE_USAGE_READ_ONLY, - 'NONSTRICT_READ_WRITE' => ClassMetadataInfo::CACHE_USAGE_NONSTRICT_READ_WRITE, - 'READ_WRITE' => ClassMetadataInfo::CACHE_USAGE_READ_WRITE, + 'READ_ONLY' => ClassMetadata::CACHE_USAGE_READ_ONLY, + 'NONSTRICT_READ_WRITE' => ClassMetadata::CACHE_USAGE_NONSTRICT_READ_WRITE, + 'READ_WRITE' => ClassMetadata::CACHE_USAGE_READ_WRITE, ]; /** diff --git a/tests/Builders/BuilderTest.php b/tests/Builders/BuilderTest.php index 74a34e7..ab4ce36 100644 --- a/tests/Builders/BuilderTest.php +++ b/tests/Builders/BuilderTest.php @@ -5,7 +5,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DefaultNamingStrategy; use Doctrine\ORM\Mapping\MappingException; use DoctrineExtensions\Types\CarbonDateTimeType; @@ -97,7 +97,7 @@ public static function setUpBeforeClass(): void protected function setUp(): void { - $this->builder = new ClassMetadataBuilder(new ClassMetadataInfo( + $this->builder = new ClassMetadataBuilder(new ClassMetadata( FluentEntity::class )); diff --git a/tests/Builders/EmbeddedTest.php b/tests/Builders/EmbeddedTest.php index 48b51d5..04d71c2 100644 --- a/tests/Builders/EmbeddedTest.php +++ b/tests/Builders/EmbeddedTest.php @@ -3,7 +3,7 @@ namespace Tests\Builders; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DefaultNamingStrategy; use LaravelDoctrine\Fluent\Builders\Embedded; use PHPUnit\Framework\TestCase; @@ -22,7 +22,7 @@ class EmbeddedTest extends TestCase protected function setUp(): void { - $this->builder = new ClassMetadataBuilder(new ClassMetadataInfo( + $this->builder = new ClassMetadataBuilder(new ClassMetadata( FluentEmbeddable::class )); diff --git a/tests/Builders/EntityListenersTest.php b/tests/Builders/EntityListenersTest.php index cf7dc7f..2a95c8c 100644 --- a/tests/Builders/EntityListenersTest.php +++ b/tests/Builders/EntityListenersTest.php @@ -4,7 +4,7 @@ use Doctrine\ORM\Events; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use LaravelDoctrine\Fluent\Builders\EntityListeners; use PHPUnit\Framework\TestCase; use Tests\Stubs\Entities\StubEntity; @@ -25,7 +25,7 @@ class EntityListenersTest extends TestCase protected function setUp(): void { $this->fluent = new ClassMetadataBuilder( - new ClassMetadataInfo(StubEntity::class) + new ClassMetadata(StubEntity::class) ); $this->builder = new EntityListeners($this->fluent); diff --git a/tests/Builders/EntityTest.php b/tests/Builders/EntityTest.php index b490d14..e19fe65 100644 --- a/tests/Builders/EntityTest.php +++ b/tests/Builders/EntityTest.php @@ -3,7 +3,7 @@ namespace Tests\Builders; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use LaravelDoctrine\Fluent\Builders\Entity; use LaravelDoctrine\Fluent\Builders\Traits\Macroable; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; @@ -27,7 +27,7 @@ class EntityTest extends TestCase protected function setUp(): void { - $this->builder = new ClassMetadataBuilder(new ClassMetadataInfo(StubEntity::class)); + $this->builder = new ClassMetadataBuilder(new ClassMetadata(StubEntity::class)); $this->entity = new Entity($this->builder); } @@ -52,11 +52,11 @@ public function test_can_enable_2nd_level_cache() $this->assertFalse($this->builder->getClassMetadata()->isReadOnly); $this->entity->cacheable(); - $this->assertEquals(ClassMetadataInfo::CACHE_USAGE_READ_ONLY, $this->builder->getClassMetadata()->cache['usage']); + $this->assertEquals(ClassMetadata::CACHE_USAGE_READ_ONLY, $this->builder->getClassMetadata()->cache['usage']); $this->assertEquals('tests_stubs_entities_stubentity', $this->builder->getClassMetadata()->cache['region']); - $this->entity->cacheable(ClassMetadataInfo::CACHE_USAGE_READ_WRITE, 'custom_region'); - $this->assertEquals(ClassMetadataInfo::CACHE_USAGE_READ_WRITE, $this->builder->getClassMetadata()->cache['usage']); + $this->entity->cacheable(ClassMetadata::CACHE_USAGE_READ_WRITE, 'custom_region'); + $this->assertEquals(ClassMetadata::CACHE_USAGE_READ_WRITE, $this->builder->getClassMetadata()->cache['usage']); $this->assertEquals('custom_region', $this->builder->getClassMetadata()->cache['region']); } diff --git a/tests/Builders/FieldTest.php b/tests/Builders/FieldTest.php index 137ab8e..b4b583d 100644 --- a/tests/Builders/FieldTest.php +++ b/tests/Builders/FieldTest.php @@ -5,7 +5,7 @@ use BadMethodCallException; use Doctrine\DBAL\Types\StringType; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\MappingException; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; @@ -32,7 +32,7 @@ class FieldTest extends TestCase protected function setUp(): void { - $this->builder = new ClassMetadataBuilder(new ClassMetadataInfo(StubEntity::class)); + $this->builder = new ClassMetadataBuilder(new ClassMetadata(StubEntity::class)); $this->builder->setTable('stub_entities'); $this->field = Field::make($this->builder, 'string', 'name'); @@ -111,7 +111,7 @@ public function test_can_set_generated_value_strategy() $this->field->build(); - $this->assertTrue($this->builder->getClassMetadata()->generatorType == ClassMetadataInfo::GENERATOR_TYPE_AUTO); + $this->assertTrue($this->builder->getClassMetadata()->generatorType == ClassMetadata::GENERATOR_TYPE_AUTO); } public function test_can_enrich_generated_value_with_a_closure() @@ -348,7 +348,7 @@ public function test_buildable_objects_returned_from_macros_get_queued_and_built private function doTestValidTypeForVersioning($type) { - $builder = new ClassMetadataBuilder(new ClassMetadataInfo(StubEntity::class)); + $builder = new ClassMetadataBuilder(new ClassMetadata(StubEntity::class)); $field = Field::make($builder, $type, "{$type}Field"); $field->useForVersioning()->build(); @@ -360,7 +360,7 @@ private function doTestValidTypeForVersioning($type) private function doTestInvalidTypeForVersioning($type) { - $builder = new ClassMetadataBuilder(new ClassMetadataInfo(StubEntity::class)); + $builder = new ClassMetadataBuilder(new ClassMetadata(StubEntity::class)); $field = Field::make($builder, $type, 'aField'); $this->expectException(MappingException::class); diff --git a/tests/Builders/GeneratedValueTest.php b/tests/Builders/GeneratedValueTest.php index ab77e5a..eb1b02a 100644 --- a/tests/Builders/GeneratedValueTest.php +++ b/tests/Builders/GeneratedValueTest.php @@ -3,7 +3,7 @@ namespace Tests\Builders; use Doctrine\ORM\Mapping\Builder\FieldBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use LaravelDoctrine\Fluent\Builders\GeneratedValue; use PHPUnit\Framework\TestCase; @@ -15,7 +15,7 @@ class GeneratedValueTest extends TestCase protected $field; /** - * @var \PHPUnit_Framework_MockObject_MockObject|ClassMetadataInfo + * @var \PHPUnit_Framework_MockObject_MockObject|ClassMetadata */ protected $cm; @@ -27,7 +27,7 @@ class GeneratedValueTest extends TestCase protected function setUp(): void { $this->field = $this->getMockBuilder(FieldBuilder::class)->disableOriginalConstructor()->getMock(); - $this->cm = $this->getMockBuilder(ClassMetadataInfo::class)->disableOriginalConstructor()->getMock(); + $this->cm = $this->getMockBuilder(ClassMetadata::class)->disableOriginalConstructor()->getMock(); $this->fluent = new GeneratedValue($this->field, $this->cm); } diff --git a/tests/Builders/IndexTest.php b/tests/Builders/IndexTest.php index 672b741..869c05c 100644 --- a/tests/Builders/IndexTest.php +++ b/tests/Builders/IndexTest.php @@ -3,7 +3,7 @@ namespace Tests\Builders; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use LaravelDoctrine\Fluent\Builders\Index; use PHPUnit\Framework\TestCase; use Tests\Stubs\Entities\StubEntity; @@ -17,7 +17,7 @@ class IndexTest extends TestCase protected function setUp(): void { - $this->builder = new ClassMetadataBuilder(new ClassMetadataInfo(StubEntity::class)); + $this->builder = new ClassMetadataBuilder(new ClassMetadata(StubEntity::class)); $this->builder->setTable('stub_entities'); } diff --git a/tests/Builders/Inheritance/InheritanceFactoryTest.php b/tests/Builders/Inheritance/InheritanceFactoryTest.php index a1d2a4a..5baff14 100644 --- a/tests/Builders/Inheritance/InheritanceFactoryTest.php +++ b/tests/Builders/Inheritance/InheritanceFactoryTest.php @@ -3,7 +3,7 @@ namespace Tests\Builders\Inheritance; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use InvalidArgumentException; use LaravelDoctrine\Fluent\Builders\Inheritance\Inheritance; use LaravelDoctrine\Fluent\Builders\Inheritance\InheritanceFactory; @@ -21,7 +21,7 @@ class InheritanceFactoryTest extends TestCase protected function setUp(): void { - $this->builder = new ClassMetadataBuilder(new ClassMetadataInfo( + $this->builder = new ClassMetadataBuilder(new ClassMetadata( StubEntity::class )); } diff --git a/tests/Builders/Inheritance/JoinedTableInheritanceTest.php b/tests/Builders/Inheritance/JoinedTableInheritanceTest.php index 4cf7149..1cbf50d 100644 --- a/tests/Builders/Inheritance/JoinedTableInheritanceTest.php +++ b/tests/Builders/Inheritance/JoinedTableInheritanceTest.php @@ -3,7 +3,7 @@ namespace Tests\Builders\Inheritance; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use LaravelDoctrine\Fluent\Builders\Inheritance\JoinedTableInheritance; use Tests\Stubs\Entities\StubEntity; @@ -21,7 +21,7 @@ class JoinedTableInheritanceTest extends InheritanceTestCase protected function setUp(): void { - $this->builder = new ClassMetadataBuilder(new ClassMetadataInfo( + $this->builder = new ClassMetadataBuilder(new ClassMetadata( StubEntity::class )); diff --git a/tests/Builders/Inheritance/SingleTableInheritanceTest.php b/tests/Builders/Inheritance/SingleTableInheritanceTest.php index 637d616..9bc222d 100644 --- a/tests/Builders/Inheritance/SingleTableInheritanceTest.php +++ b/tests/Builders/Inheritance/SingleTableInheritanceTest.php @@ -3,7 +3,7 @@ namespace Tests\Builders\Inheritance; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use LaravelDoctrine\Fluent\Builders\Inheritance\SingleTableInheritance; use Tests\Stubs\Entities\StubEntity; @@ -21,7 +21,7 @@ class SingleTableInheritanceTest extends InheritanceTestCase protected function setUp(): void { - $this->builder = new ClassMetadataBuilder(new ClassMetadataInfo( + $this->builder = new ClassMetadataBuilder(new ClassMetadata( StubEntity::class )); diff --git a/tests/Builders/LifecycleEventsTest.php b/tests/Builders/LifecycleEventsTest.php index 28220ba..2edafd8 100644 --- a/tests/Builders/LifecycleEventsTest.php +++ b/tests/Builders/LifecycleEventsTest.php @@ -4,7 +4,7 @@ use Doctrine\ORM\Events; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use LaravelDoctrine\Fluent\Builders\LifecycleEvents; use PHPUnit\Framework\TestCase; use Tests\Stubs\Entities\StubEntity; @@ -24,7 +24,7 @@ class LifecycleEventsTest extends TestCase protected function setUp(): void { $this->fluent = new ClassMetadataBuilder( - new ClassMetadataInfo(StubEntity::class) + new ClassMetadata(StubEntity::class) ); $this->builder = new LifecycleEvents($this->fluent); diff --git a/tests/Builders/Overrides/AssociationOverrideTest.php b/tests/Builders/Overrides/AssociationOverrideTest.php index 58aa5de..c5033fa 100644 --- a/tests/Builders/Overrides/AssociationOverrideTest.php +++ b/tests/Builders/Overrides/AssociationOverrideTest.php @@ -3,7 +3,7 @@ namespace Tests\Builders\Overrides; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DefaultNamingStrategy; use Doctrine\ORM\Mapping\MappingException; use InvalidArgumentException; @@ -22,7 +22,7 @@ class AssociationOverrideTest extends TestCase protected function setUp(): void { - $this->builder = new ClassMetadataBuilder(new ClassMetadataInfo( + $this->builder = new ClassMetadataBuilder(new ClassMetadata( StubEntity::class )); diff --git a/tests/Builders/Overrides/AttributeOverrideTest.php b/tests/Builders/Overrides/AttributeOverrideTest.php index d443f66..41c6361 100644 --- a/tests/Builders/Overrides/AttributeOverrideTest.php +++ b/tests/Builders/Overrides/AttributeOverrideTest.php @@ -3,7 +3,7 @@ namespace Tests\Builders\Overrides; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DefaultNamingStrategy; use Doctrine\ORM\Mapping\MappingException; use InvalidArgumentException; @@ -20,7 +20,7 @@ class AttributeOverrideTest extends TestCase protected function setUp(): void { - $this->builder = new ClassMetadataBuilder(new ClassMetadataInfo( + $this->builder = new ClassMetadataBuilder(new ClassMetadata( StubEntity::class )); diff --git a/tests/Builders/Overrides/OverrideBuilderFactoryTest.php b/tests/Builders/Overrides/OverrideBuilderFactoryTest.php index a73f631..6d7b2c3 100644 --- a/tests/Builders/Overrides/OverrideBuilderFactoryTest.php +++ b/tests/Builders/Overrides/OverrideBuilderFactoryTest.php @@ -3,7 +3,7 @@ namespace Tests\Builders\Overrides; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DefaultNamingStrategy; use InvalidArgumentException; use LaravelDoctrine\Fluent\Builders\Overrides\AssociationOverride; @@ -16,7 +16,7 @@ class OverrideBuilderFactoryTest extends TestCase { public function test_can_create_attribute_override() { - $builder = new ClassMetadataBuilder(new ClassMetadataInfo( + $builder = new ClassMetadataBuilder(new ClassMetadata( StubEntity::class )); @@ -36,7 +36,7 @@ function ($attribute) { public function test_can_create_association_override() { - $builder = new ClassMetadataBuilder(new ClassMetadataInfo( + $builder = new ClassMetadataBuilder(new ClassMetadata( StubEntity::class )); @@ -59,7 +59,7 @@ public function test_can_only_create_overrides_for_existing_attributes_or_relati $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage('No attribute or association could be found for some_field'); - $builder = new ClassMetadataBuilder(new ClassMetadataInfo( + $builder = new ClassMetadataBuilder(new ClassMetadata( StubEntity::class )); diff --git a/tests/Builders/Overrides/OverrideTest.php b/tests/Builders/Overrides/OverrideTest.php index 63f0d15..0340594 100644 --- a/tests/Builders/Overrides/OverrideTest.php +++ b/tests/Builders/Overrides/OverrideTest.php @@ -3,7 +3,7 @@ namespace Tests\Builders\Overrides; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DefaultNamingStrategy; use LaravelDoctrine\Fluent\Builders\Delay; use LaravelDoctrine\Fluent\Builders\Overrides\Override; @@ -14,7 +14,7 @@ class OverrideTest extends TestCase { public function test_can_build_attribute_override() { - $meta = new ClassMetadataInfo( + $meta = new ClassMetadata( StubEntity::class ); @@ -37,7 +37,7 @@ function ($attribute) { public function test_can_build_association_override() { - $meta = new ClassMetadataInfo( + $meta = new ClassMetadata( StubEntity::class ); diff --git a/tests/Builders/PrimaryTest.php b/tests/Builders/PrimaryTest.php index 92e4f4e..477b279 100644 --- a/tests/Builders/PrimaryTest.php +++ b/tests/Builders/PrimaryTest.php @@ -3,7 +3,7 @@ namespace Tests\Builders; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use LaravelDoctrine\Fluent\Builders\Primary; use PHPUnit\Framework\TestCase; use Tests\Stubs\Entities\StubEntity; @@ -17,7 +17,7 @@ class PrimaryTest extends TestCase protected function setUp(): void { - $this->builder = new ClassMetadataBuilder(new ClassMetadataInfo(StubEntity::class)); + $this->builder = new ClassMetadataBuilder(new ClassMetadata(StubEntity::class)); $this->builder->setTable('stub_entities'); } diff --git a/tests/Builders/TableTest.php b/tests/Builders/TableTest.php index ee98761..735c062 100644 --- a/tests/Builders/TableTest.php +++ b/tests/Builders/TableTest.php @@ -3,7 +3,7 @@ namespace Tests\Builders; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use LaravelDoctrine\Fluent\Builders\Table; use PHPUnit\Framework\TestCase; use Tests\Stubs\Entities\StubEntity; @@ -22,7 +22,7 @@ class TableTest extends TestCase protected function setUp(): void { - $this->builder = new ClassMetadataBuilder(new ClassMetadataInfo(StubEntity::class)); + $this->builder = new ClassMetadataBuilder(new ClassMetadata(StubEntity::class)); $this->table = new Table($this->builder); } diff --git a/tests/Builders/UniqueConstraintTest.php b/tests/Builders/UniqueConstraintTest.php index d6854ca..5a51b9f 100644 --- a/tests/Builders/UniqueConstraintTest.php +++ b/tests/Builders/UniqueConstraintTest.php @@ -3,7 +3,7 @@ namespace Tests\Builders; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use LaravelDoctrine\Fluent\Builders\UniqueConstraint; use PHPUnit\Framework\TestCase; use Tests\Stubs\Entities\StubEntity; @@ -17,7 +17,7 @@ class UniqueConstraintTest extends TestCase protected function setUp(): void { - $this->builder = new ClassMetadataBuilder(new ClassMetadataInfo(StubEntity::class)); + $this->builder = new ClassMetadataBuilder(new ClassMetadata(StubEntity::class)); $this->builder->setTable('stub_entities'); } diff --git a/tests/FluentDriverTest.php b/tests/FluentDriverTest.php index 809d8fb..e8aaf39 100644 --- a/tests/FluentDriverTest.php +++ b/tests/FluentDriverTest.php @@ -3,7 +3,7 @@ namespace Tests; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\MappingException; use Doctrine\Persistence\Mapping\ClassMetadata; use LaravelDoctrine\Fluent\Builders\Builder; @@ -30,7 +30,7 @@ public function test_it_should_load_metadata_for_entities_that_were_added_to_it( $driver->addMapping(new FakeClassMapping()); $driver->loadMetadataForClass( FakeEntity::class, - new ClassMetadataInfo(FakeEntity::class) + new ClassMetadata(FakeEntity::class) ); $this->assertInstanceOf( @@ -46,7 +46,7 @@ public function test_it_should_load_metadata_for_embeddables_that_were_added_to_ $driver->addMapping(new StubEmbeddableMapping()); $driver->loadMetadataForClass( StubEmbeddable::class, - new ClassMetadataInfo(StubEmbeddable::class) + new ClassMetadata(StubEmbeddable::class) ); $this->assertInstanceOf( @@ -62,7 +62,7 @@ public function test_it_should_load_metadata_for_mapped_super_classes_that_were_ $driver->addMapping(new StubMappedSuperClassMapping()); $driver->loadMetadataForClass( StubMappedSuperClass::class, - new ClassMetadataInfo(StubMappedSuperClass::class) + new ClassMetadata(StubMappedSuperClass::class) ); $this->assertInstanceOf( @@ -81,7 +81,7 @@ public function test_it_should_load_metadata_for_mappings_passed_as_constructor_ $driver->loadMetadataForClass( StubEntity::class, - new ClassMetadataInfo(StubEntity::class) + new ClassMetadata(StubEntity::class) ); $this->assertInstanceOf( EntityMapper::class, @@ -90,7 +90,7 @@ public function test_it_should_load_metadata_for_mappings_passed_as_constructor_ $driver->loadMetadataForClass( StubEmbeddable::class, - new ClassMetadataInfo(StubEmbeddable::class) + new ClassMetadata(StubEmbeddable::class) ); $this->assertInstanceOf( EmbeddableMapper::class, @@ -99,7 +99,7 @@ public function test_it_should_load_metadata_for_mappings_passed_as_constructor_ $driver->loadMetadataForClass( StubMappedSuperClass::class, - new ClassMetadataInfo(StubMappedSuperClass::class) + new ClassMetadata(StubMappedSuperClass::class) ); $this->assertInstanceOf( MappedSuperClassMapper::class, @@ -212,7 +212,7 @@ public function test_it_should_fail_when_asked_for_metadata_that_was_not_added_t $driver->loadMetadataForClass( FakeEntity::class, - new ClassMetadataInfo(FakeEntity::class) + new ClassMetadata(FakeEntity::class) ); } @@ -228,7 +228,7 @@ public function test_allow_other_fluent_implementations() $mapping->expects($this->once())->method('map')->with($this->isInstanceOf(CustomBuilder::class)); $driver->getMappers()->addMapper('fake', new EntityMapper($mapping)); - $driver->loadMetadataForClass('fake', new ClassMetadataInfo('fake')); + $driver->loadMetadataForClass('fake', new ClassMetadata('fake')); } } diff --git a/tests/Mappers/EmbeddableMapperTest.php b/tests/Mappers/EmbeddableMapperTest.php index 3cdd19a..b542043 100644 --- a/tests/Mappers/EmbeddableMapperTest.php +++ b/tests/Mappers/EmbeddableMapperTest.php @@ -3,7 +3,7 @@ namespace Tests\Mappers; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use LaravelDoctrine\Fluent\Builders\Builder; use LaravelDoctrine\Fluent\Mappers\EmbeddableMapper; use LaravelDoctrine\Fluent\Mappers\Mapper; @@ -36,7 +36,7 @@ public function test_it_should_be_transient() public function test_it_should_delegate_the_proper_mapping_to_the_mapping_class() { - $metadata = new ClassMetadataInfo(StubEmbeddable::class); + $metadata = new ClassMetadata(StubEmbeddable::class); $builder = new Builder(new ClassMetadataBuilder($metadata)); $this->mapper->map($builder); diff --git a/tests/Mappers/EntityMapperTest.php b/tests/Mappers/EntityMapperTest.php index 81d66cb..ff0844b 100644 --- a/tests/Mappers/EntityMapperTest.php +++ b/tests/Mappers/EntityMapperTest.php @@ -3,7 +3,7 @@ namespace Tests\Mappers; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use LaravelDoctrine\Fluent\Builders\Builder; use LaravelDoctrine\Fluent\Mappers\EntityMapper; use LaravelDoctrine\Fluent\Mappers\Mapper; @@ -36,7 +36,7 @@ public function test_it_should_not_be_transient() public function test_it_should_delegate_the_proper_mapping_to_the_mapping_class() { - $metadata = new ClassMetadataInfo(StubEntity::class); + $metadata = new ClassMetadata(StubEntity::class); $builder = new Builder(new ClassMetadataBuilder($metadata)); $this->mapper->map($builder); diff --git a/tests/Mappers/MappedSuperClassMapperTest.php b/tests/Mappers/MappedSuperClassMapperTest.php index 310e50f..f162d67 100644 --- a/tests/Mappers/MappedSuperClassMapperTest.php +++ b/tests/Mappers/MappedSuperClassMapperTest.php @@ -3,7 +3,7 @@ namespace Tests\Mappers; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use LaravelDoctrine\Fluent\Builders\Builder; use LaravelDoctrine\Fluent\Mappers\MappedSuperClassMapper; use LaravelDoctrine\Fluent\Mappers\Mapper; @@ -36,7 +36,7 @@ public function test_it_should_not_be_transient() public function test_it_should_delegate_the_proper_mapping_to_the_mapping_class() { - $metadata = new ClassMetadataInfo(StubMappedSuperClass::class); + $metadata = new ClassMetadata(StubMappedSuperClass::class); $builder = new Builder(new ClassMetadataBuilder($metadata)); $this->mapper->map($builder); diff --git a/tests/Relations/ManyToManyTest.php b/tests/Relations/ManyToManyTest.php index 32cf25b..ba34d5c 100644 --- a/tests/Relations/ManyToManyTest.php +++ b/tests/Relations/ManyToManyTest.php @@ -3,7 +3,7 @@ namespace Tests\Relations; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DefaultNamingStrategy; use LaravelDoctrine\Fluent\Relations\ManyToMany; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; @@ -41,7 +41,7 @@ class ManyToManyTest extends RelationTestCase protected function setUp(): void { - $this->builder = new ClassMetadataBuilder(new ClassMetadataInfo( + $this->builder = new ClassMetadataBuilder(new ClassMetadata( FluentEntity::class )); diff --git a/tests/Relations/ManyToOneTest.php b/tests/Relations/ManyToOneTest.php index b5c7b0c..6da0ffe 100644 --- a/tests/Relations/ManyToOneTest.php +++ b/tests/Relations/ManyToOneTest.php @@ -3,7 +3,7 @@ namespace Tests\Relations; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DefaultNamingStrategy; use LaravelDoctrine\Fluent\Builders\Traits\Macroable; use LaravelDoctrine\Fluent\Relations\JoinColumn; @@ -37,7 +37,7 @@ class ManyToOneTest extends RelationTestCase protected function setUp(): void { - $this->builder = new ClassMetadataBuilder(new ClassMetadataInfo( + $this->builder = new ClassMetadataBuilder(new ClassMetadata( FluentEntity::class )); diff --git a/tests/Relations/OneToManyTest.php b/tests/Relations/OneToManyTest.php index c33f927..9da7378 100644 --- a/tests/Relations/OneToManyTest.php +++ b/tests/Relations/OneToManyTest.php @@ -3,7 +3,7 @@ namespace Tests\Relations; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DefaultNamingStrategy; use LaravelDoctrine\Fluent\Relations\ManyToOne; use LaravelDoctrine\Fluent\Relations\OneToMany; @@ -38,7 +38,7 @@ class OneToManyTest extends RelationTestCase protected function setUp(): void { - $this->builder = new ClassMetadataBuilder(new ClassMetadataInfo( + $this->builder = new ClassMetadataBuilder(new ClassMetadata( FluentEntity::class )); diff --git a/tests/Relations/OneToOneTest.php b/tests/Relations/OneToOneTest.php index df51cbd..405dfa2 100644 --- a/tests/Relations/OneToOneTest.php +++ b/tests/Relations/OneToOneTest.php @@ -3,7 +3,7 @@ namespace Tests\Relations; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DefaultNamingStrategy; use LaravelDoctrine\Fluent\Builders\Traits\Macroable; use LaravelDoctrine\Fluent\Relations\ManyToOne; @@ -41,7 +41,7 @@ class OneToOneTest extends RelationTestCase protected function setUp(): void { - $this->builder = new ClassMetadataBuilder(new ClassMetadataInfo( + $this->builder = new ClassMetadataBuilder(new ClassMetadata( FluentEntity::class )); From e94842521a3b4c39ff652412f418f6bdac28023c Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Wed, 6 Aug 2025 16:01:29 -0600 Subject: [PATCH 03/31] More ClassMetadata update --- src/Builders/Field.php | 1 - src/FluentDriver.php | 3 ++- src/Relations/AssociationCache.php | 1 - tests/FluentDriverTest.php | 1 - 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Builders/Field.php b/src/Builders/Field.php index 33d70fc..e040961 100644 --- a/src/Builders/Field.php +++ b/src/Builders/Field.php @@ -7,7 +7,6 @@ use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\Builder\FieldBuilder; use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\Persistence\Mapping\ClassMetadata; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Traits\Macroable; use LaravelDoctrine\Fluent\Builders\Traits\Queueable; diff --git a/src/FluentDriver.php b/src/FluentDriver.php index 0af836b..7254128 100644 --- a/src/FluentDriver.php +++ b/src/FluentDriver.php @@ -5,6 +5,7 @@ use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Mapping\NamingStrategy; +use Doctrine\ORM\Mapping\ClassMetadata as ORMClassMetadata; use Doctrine\Persistence\Mapping\ClassMetadata; use Doctrine\Persistence\Mapping\Driver\MappingDriver; use InvalidArgumentException; @@ -34,7 +35,7 @@ public function __construct( array $mappings = [], ?NamingStrategy $namingStrategy = null ) { - $this->fluentFactory = function (ClassMetadata $metadata) use ($namingStrategy) { + $this->fluentFactory = function (ORMClassMetadata $metadata) use ($namingStrategy) { return new Builder(new ClassMetadataBuilder($metadata), $namingStrategy); }; diff --git a/src/Relations/AssociationCache.php b/src/Relations/AssociationCache.php index eecaa8e..b025e27 100644 --- a/src/Relations/AssociationCache.php +++ b/src/Relations/AssociationCache.php @@ -3,7 +3,6 @@ namespace LaravelDoctrine\Fluent\Relations; use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\Persistence\Mapping\ClassMetadata; use InvalidArgumentException; use LaravelDoctrine\Fluent\Buildable; diff --git a/tests/FluentDriverTest.php b/tests/FluentDriverTest.php index e8aaf39..95afbcc 100644 --- a/tests/FluentDriverTest.php +++ b/tests/FluentDriverTest.php @@ -5,7 +5,6 @@ use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\MappingException; -use Doctrine\Persistence\Mapping\ClassMetadata; use LaravelDoctrine\Fluent\Builders\Builder; use LaravelDoctrine\Fluent\EntityMapping; use LaravelDoctrine\Fluent\Fluent; From e03842a2f7513db3897a86bf525a4316c0877c31 Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Wed, 6 Aug 2025 16:13:47 -0600 Subject: [PATCH 04/31] AssociationOverride array access updates --- .../Overrides/AssociationOverride.php | 89 +++++++++---------- 1 file changed, 44 insertions(+), 45 deletions(-) diff --git a/src/Builders/Overrides/AssociationOverride.php b/src/Builders/Overrides/AssociationOverride.php index 866968f..ce92cd7 100644 --- a/src/Builders/Overrides/AssociationOverride.php +++ b/src/Builders/Overrides/AssociationOverride.php @@ -2,8 +2,13 @@ namespace LaravelDoctrine\Fluent\Builders\Overrides; +use ArrayAccess; +use Doctrine\ORM\Mapping\AssociationMapping; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\JoinColumnMapping; +use Doctrine\ORM\Mapping\JoinTableMapping; +use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Mapping\NamingStrategy; use InvalidArgumentException; use LaravelDoctrine\Fluent\Buildable; @@ -49,13 +54,13 @@ class AssociationOverride implements Buildable */ public function __construct( ClassMetadataBuilder $builder, - NamingStrategy $namingStrategy, - $name, - callable $callback + NamingStrategy $namingStrategy, + $name, + callable $callback ) { - $this->builder = $builder; - $this->callback = $callback; - $this->name = $name; + $this->builder = $builder; + $this->callback = $callback; + $this->name = $name; $this->namingStrategy = $namingStrategy; } @@ -67,12 +72,12 @@ public function build() $callback = $this->callback; // We will create a new class metadata builder instance, - // so we can use it to easily generated a new mapping + // so we can use it to easily generate a new mapping // array, without re-declaring the existing association $builder = $this->newClassMetadataBuilder(); $source = $this->convertToMappingArray($this->builder); - if (!isset($this->relations[$source['type']])) { + if (!isset($this->relations[$source->type()])) { throw new InvalidArgumentException('Only ManyToMany and ManyToOne relations can be overridden'); } @@ -82,12 +87,12 @@ public function build() // Give the original join table name, so we won't // accidentally remove custom join table names if ($this->hasJoinTable($source)) { - $associationBuilder->setJoinTable($source['joinTable']['name']); + $associationBuilder->setJoinTable($source->joinTable->name); } $association = $callback($associationBuilder); - // When the user forget to return, use the $associationBuilder instance + // When the user forgets to return, use the $associationBuilder instance // which contains the same information $association = $association ?: $associationBuilder; @@ -104,16 +109,16 @@ public function build() // ManyToMany mappings if ($this->hasJoinTable($target)) { $overrideMapping['joinTable'] = $this->mapJoinTable( - $target['joinTable'], - $source['joinTable'] + $target->joinTable, + $source->joinTable ); } // ManyToOne mappings if ($this->hasJoinColumns($target)) { $overrideMapping['joinColumns'] = $this->mapJoinColumns( - $target['joinColumns'], - $source['joinColumns'] + $target->joinColumns, + $source->joinColumns ); } @@ -126,9 +131,9 @@ public function build() /** * @param ClassMetadataBuilder $builder * - * @throws \Doctrine\ORM\Mapping\MappingException + * @throws MappingException * - * @return array + * @return AssociationMapping */ protected function convertToMappingArray(ClassMetadataBuilder $builder) { @@ -148,42 +153,36 @@ protected function newClassMetadataBuilder() } /** - * @param $builder - * @param $source - * * @return mixed */ - protected function getAssociationBuilder(ClassMetadataBuilder $builder, array $source) + protected function getAssociationBuilder(ClassMetadataBuilder $builder, AssociationMapping $source) { - return new $this->relations[$source['type']]( + return new $this->relations[$source->type()]( $builder, $this->namingStrategy, $this->name, - $source['targetEntity'] + $source->targetEntity ); } /** - * @param array $target - * @param array $source - * * @return array */ - protected function mapJoinTable(array $target = [], array $source = []) + protected function mapJoinTable(JoinTableMapping $target, JoinTableMapping $source) { - $joinTable['name'] = $target['name']; + $joinTable['name'] = $target->name; if ($this->hasJoinColumns($target)) { $joinTable['joinColumns'] = $this->mapJoinColumns( - $target['joinColumns'], - $source['joinColumns'] + $target->joinColumns, + $source->joinColumns ); } if ($this->hasInverseJoinColumns($target)) { $joinTable['inverseJoinColumns'] = $this->mapJoinColumns( - $target['inverseJoinColumns'], - $source['inverseJoinColumns'] + $target->inverseJoinColumns, + $source->inverseJoinColumns ); } @@ -191,8 +190,8 @@ protected function mapJoinTable(array $target = [], array $source = []) } /** - * @param array $target - * @param array $source + * @param array $target + * @param array $source * * @return mixed * @@ -200,12 +199,12 @@ protected function mapJoinTable(array $target = [], array $source = []) * @internal param $source * @internal param $overrideMapping */ - protected function mapJoinColumns(array $target = [], array $source = []) + protected function mapJoinColumns(array $target, array $source) { $joinColumns = []; foreach ($target as $index => $joinColumn) { - if (isset($source[$index])) { - $diff = array_diff($joinColumn, $source[$index]); + if (isset($source->$index)) { + $diff = array_diff((array)$joinColumn, $source->$index); if (!empty($diff)) { $joinColumns[] = $diff; @@ -217,32 +216,32 @@ protected function mapJoinColumns(array $target = [], array $source = []) } /** - * @param array $target + * @param ArrayAccess $target * * @return bool */ - protected function hasJoinColumns(array $target = []) + protected function hasJoinColumns(ArrayAccess $target) { - return isset($target['joinColumns']); + return isset($target->joinColumns); } /** - * @param array $target + * @param ArrayAccess $target * * @return bool */ - protected function hasInverseJoinColumns(array $target = []) + protected function hasInverseJoinColumns(ArrayAccess $target) { - return isset($target['inverseJoinColumns']); + return isset($target->inverseJoinColumns); } /** - * @param array $target + * @param ArrayAccess $target * * @return bool */ - protected function hasJoinTable(array $target = []) + protected function hasJoinTable(ArrayAccess $target) { - return isset($target['joinTable']); + return isset($target->joinTable); } } From 46fa73697226ec9a1b3d3fc41d14c30bb0e528da Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Wed, 6 Aug 2025 16:16:19 -0600 Subject: [PATCH 05/31] AttributeOverride array access updates --- src/Builders/Overrides/AttributeOverride.php | 29 ++++++++++---------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/Builders/Overrides/AttributeOverride.php b/src/Builders/Overrides/AttributeOverride.php index 56bdb23..afab1cc 100644 --- a/src/Builders/Overrides/AttributeOverride.php +++ b/src/Builders/Overrides/AttributeOverride.php @@ -4,6 +4,8 @@ use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FieldMapping; +use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Mapping\NamingStrategy; use InvalidArgumentException; use LaravelDoctrine\Fluent\Buildable; @@ -39,13 +41,13 @@ class AttributeOverride implements Buildable */ public function __construct( ClassMetadataBuilder $builder, - NamingStrategy $namingStrategy, - $name, - callable $callback + NamingStrategy $namingStrategy, + $name, + callable $callback ) { - $this->builder = $builder; - $this->callback = $callback; - $this->name = $name; + $this->builder = $builder; + $this->callback = $callback; + $this->name = $name; $this->namingStrategy = $namingStrategy; } @@ -57,7 +59,7 @@ public function build() $callback = $this->callback; // We will create a new class metadata builder instance, - // so we can use it to easily generated a new mapping + // so we can use it to easily generate a new mapping // array, without re-declaring the existing field $builder = $this->newClassMetadataBuilder(); @@ -72,7 +74,7 @@ public function build() $field = $callback($fieldBuilder); - // When the user forget to return, use the Field instance + // When the user forgets to return, use the Field instance // which contains the same information $field = $field ?: $fieldBuilder; @@ -86,21 +88,20 @@ public function build() $this->builder->getClassMetadata()->setAttributeOverride( $this->name, - $this->mergeRecursively($source, $target) + $this->mergeRecursively((array)$source, (array)$target) ); } /** * @param ClassMetadataBuilder $builder - * @param array $mapping * * @return Field */ - protected function getFieldBuilder(ClassMetadataBuilder $builder, array $mapping) + protected function getFieldBuilder(ClassMetadataBuilder $builder, FieldMapping $mapping) { return Field::make( $builder, - $mapping['type'], + $mapping->type, $this->name ); } @@ -108,9 +109,9 @@ protected function getFieldBuilder(ClassMetadataBuilder $builder, array $mapping /** * @param ClassMetadataBuilder $builder * - * @throws \Doctrine\ORM\Mapping\MappingException + * @throws MappingException * - * @return array + * @return FieldMapping */ protected function convertToMappingArray(ClassMetadataBuilder $builder) { From d696be4e3318406737d2f82b0fdaf4415b42327e Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Wed, 6 Aug 2025 16:21:15 -0600 Subject: [PATCH 06/31] Misc updates --- src/Builders/Table.php | 2 +- src/Relations/JoinColumn.php | 30 +++++++++---------- ...ensibleClassMetadataFactoryFactoryTest.php | 3 +- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/Builders/Table.php b/src/Builders/Table.php index 9aed011..04be54f 100644 --- a/src/Builders/Table.php +++ b/src/Builders/Table.php @@ -39,7 +39,7 @@ public function __construct(ClassMetadataBuilder $builder, $name = null) */ public function setName($name) { - $this->builder->setTable($name); + $this->getClassMetadata()->setPrimaryTable(['name' => $name]); return $this; } diff --git a/src/Relations/JoinColumn.php b/src/Relations/JoinColumn.php index 1ef1ca9..9558dfe 100644 --- a/src/Relations/JoinColumn.php +++ b/src/Relations/JoinColumn.php @@ -58,21 +58,21 @@ class JoinColumn */ public function __construct( NamingStrategy $namingStrategy, - $relation, - $joinColumn = null, - $referenceColumn = null, - $nullable = true, - $unique = false, - $onDelete = null, - $columnDefinition = null + $relation, + $joinColumn = null, + $referenceColumn = null, + $nullable = true, + $unique = false, + $onDelete = null, + $columnDefinition = null ) { - $this->namingStrategy = $namingStrategy; - $this->relation = $relation; - $this->joinColumn = $joinColumn; - $this->referenceColumn = $referenceColumn; - $this->nullable = $nullable; - $this->unique = $unique; - $this->onDelete = $onDelete; + $this->namingStrategy = $namingStrategy; + $this->relation = $relation; + $this->joinColumn = $joinColumn; + $this->referenceColumn = $referenceColumn; + $this->nullable = $nullable; + $this->unique = $unique; + $this->onDelete = $onDelete; $this->columnDefinition = $columnDefinition; } @@ -125,7 +125,7 @@ public function source($localKey) */ public function getJoinColumn() { - return $this->joinColumn ?: $this->namingStrategy->joinColumnName($this->relation); + return $this->joinColumn ?: $this->namingStrategy->joinColumnName($this->relation, $this->relation); } /** diff --git a/tests/Extensions/ExtensibleClassMetadataFactoryFactoryTest.php b/tests/Extensions/ExtensibleClassMetadataFactoryFactoryTest.php index 7df215f..c6e297e 100644 --- a/tests/Extensions/ExtensibleClassMetadataFactoryFactoryTest.php +++ b/tests/Extensions/ExtensibleClassMetadataFactoryFactoryTest.php @@ -20,8 +20,9 @@ public function test_it_builds_extensible_class_metadata_objects() $config = \Mockery::mock(Configuration::class); $namingStrategy = \Mockery::mock(NamingStrategy::class); - $em->shouldReceive('getConfiguration')->once()->andReturn($config); + $em->shouldReceive('getConfiguration')->twice()->andReturn($config); $config->shouldReceive('getNamingStrategy')->once()->andReturn($namingStrategy); + $config->shouldReceive('isNativeLazyObjectsEnabled')->once()->andReturn(true); $factory = new ExtensionFactoryTest(); $factory->setEntityManager($em); From 69bca43f460e91248ea837ed8986ccdb09ddc1b2 Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Wed, 6 Aug 2025 19:33:23 -0600 Subject: [PATCH 07/31] Docker setup --- .docker/conf/xdebug.ini | 8 ++++++++ Dockerfile | 40 ++++++++++++++++++++++++++++++++++++++++ composer.json | 2 +- docker-compose.yaml | 21 +++++++++++++++++++++ 4 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 .docker/conf/xdebug.ini create mode 100644 Dockerfile create mode 100644 docker-compose.yaml diff --git a/.docker/conf/xdebug.ini b/.docker/conf/xdebug.ini new file mode 100644 index 0000000..a8be81f --- /dev/null +++ b/.docker/conf/xdebug.ini @@ -0,0 +1,8 @@ +[xdebug] +xdebug.mode=develop,debug +xdebug.idekey=docker +xdebug.start_with_request=yes +xdebug.log=/dev/stdout +xdebug.log_level=0 +xdebug.client_port=9003 +xdebug.client_host=host.docker.internal \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f5d0216 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,40 @@ +# Use official PHP 8.1 CLI image as base +FROM php:8.1-apache + +# Install system dependencies +RUN apt-get update && apt-get install -y \ + git \ + unzip \ + libzip-dev \ + && docker-php-ext-install zip \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Install Composer +RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer + +# Install Xdebug +RUN pecl install xdebug && docker-php-ext-enable xdebug + +# Configure Xdebug for PhpStorm +RUN echo "[xdebug]" >> /usr/local/etc/php/conf.d/xdebug.ini \ + && echo "xdebug.mode=debug" >> /usr/local/etc/php/conf.d/xdebug.ini \ + && echo "xdebug.start_with_request=yes" >> /usr/local/etc/php/conf.d/xdebug.ini \ + && echo "xdebug.client_host=host.docker.internal" >> /usr/local/etc/php/conf.d/xdebug.ini \ + && echo "xdebug.client_port=9003" >> /usr/local/etc/php/conf.d/xdebug.ini \ + && echo "xdebug.log=/tmp/xdebug.log" >> /usr/local/etc/php/conf.d/xdebug.ini + +# Set working directory +WORKDIR /var/www/html/laravel-doctrine-fluent + +# Copy application code +COPY . /var/www/html/laravel-doctrine-fluent + +# Install Laravel dependencies +RUN composer install --no-interaction --optimize-autoloader --no-dev || true + +# Expose port for Laravel development server +EXPOSE 8000 + +# Start Laravel development server +CMD ["apache2-foreground"] diff --git a/composer.json b/composer.json index ae693b1..575cd88 100644 --- a/composer.json +++ b/composer.json @@ -23,7 +23,7 @@ } ], "require": { - "php": "^7.2|^8.0", + "php": "^8.1", "doctrine/dbal": "^2.10|^3.3", "doctrine/orm": "^3.1", "doctrine/inflector": "^1.4|^2.0", diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..49c81ee --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,21 @@ +services: + php: + build: + context: . + dockerfile: Dockerfile + container_name: laravel-doctrine-fluent + volumes: + - ./:/var/www/html/laravel-doctrine-fluent + - ./.docker/conf/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini + ports: + - "8000:80" + environment: + - XDEBUG_MODE=debug + - XDEBUG_CONFIG=client_host=host.docker.internal client_port=9003 + - PHP_IDE_CONFIG=serverName=laravel-doctrine-fluent + networks: + - app-network + +networks: + app-network: + driver: bridge From b68343e9d519848bc968d56c2ff8453842733f6d Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Wed, 6 Aug 2025 19:48:24 -0600 Subject: [PATCH 08/31] Fix tests due to php 8.1 update inability to access un-initialized property --- tests/Builders/TableTest.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/Builders/TableTest.php b/tests/Builders/TableTest.php index 735c062..e1efed6 100644 --- a/tests/Builders/TableTest.php +++ b/tests/Builders/TableTest.php @@ -35,7 +35,7 @@ public function test_can_be_constructed_with_a_name_string() public function test_it_ignores_empty_names() { - $this->assertNull($this->builder->getClassMetadata()->table); + $this->assertFalse(isset($this->builder->getClassMetadata()->table)); } public function test_it_can_be_constructed_with_a_callback_instead_of_a_name() @@ -87,14 +87,14 @@ public function test_can_set_options() public function test_set_options_does_not_touch_other_data() { - $table = $this->table->getClassMetadata()->table; + $classMetadata = $this->table->getClassMetadata(); $this->table->options(['collate' => 'utf8mb4_unicode_ci']); - $table['options'] = ['collate' => 'utf8mb4_unicode_ci']; + $classMetadata->table['options'] = ['collate' => 'utf8mb4_unicode_ci']; $this->table->build(); - $this->assertEquals($table, $this->builder->getClassMetadata()->table); + $this->assertEquals($classMetadata->table, $this->builder->getClassMetadata()->table); } public function test_can_set_options_and_change_schema() From 1718ee862bac81f68c1bffeb3ca391cf37b25db6 Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Wed, 6 Aug 2025 19:48:39 -0600 Subject: [PATCH 09/31] Fix bug --- src/Builders/Overrides/AssociationOverride.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Builders/Overrides/AssociationOverride.php b/src/Builders/Overrides/AssociationOverride.php index ce92cd7..7c1ab2d 100644 --- a/src/Builders/Overrides/AssociationOverride.php +++ b/src/Builders/Overrides/AssociationOverride.php @@ -203,8 +203,8 @@ protected function mapJoinColumns(array $target, array $source) { $joinColumns = []; foreach ($target as $index => $joinColumn) { - if (isset($source->$index)) { - $diff = array_diff((array)$joinColumn, $source->$index); + if (isset($source[$index])) { + $diff = array_diff((array)$joinColumn, (array)$source[$index]); if (!empty($diff)) { $joinColumns[] = $diff; From 98ead348ecc60bf24f40c985c86e8b67077294c7 Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Wed, 6 Aug 2025 21:15:33 -0600 Subject: [PATCH 10/31] Return types --- src/Extensions/ExtensibleClassMetadataFactory.php | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/Extensions/ExtensibleClassMetadataFactory.php b/src/Extensions/ExtensibleClassMetadataFactory.php index 6509eac..841e998 100644 --- a/src/Extensions/ExtensibleClassMetadataFactory.php +++ b/src/Extensions/ExtensibleClassMetadataFactory.php @@ -3,21 +3,17 @@ namespace LaravelDoctrine\Fluent\Extensions; use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataFactory; class ExtensibleClassMetadataFactory extends ClassMetadataFactory { - /** - * @var EntityManagerInterface - */ - protected $entityManager; + protected EntityManagerInterface $entityManager; /** * Override to hold a reference to the EntityManager here as well (parent property is private). - * - * {@inheritdoc} */ - public function setEntityManager(EntityManagerInterface $em) + public function setEntityManager(EntityManagerInterface $em): void { parent::setEntityManager($em); @@ -26,10 +22,8 @@ public function setEntityManager(EntityManagerInterface $em) /** * Override to implement our custom ClassMetadata object. - * - * {@inheritdoc} */ - protected function newClassMetadataInstance($className) + protected function newClassMetadataInstance(string $className): ClassMetadata { return new ExtensibleClassMetadata($className, $this->entityManager->getConfiguration()->getNamingStrategy()); } From 1aa4a4f5a2b1398d639b84076fb095043656bfae Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Thu, 7 Aug 2025 12:39:23 -0600 Subject: [PATCH 11/31] Fix association cache problem --- .../Overrides/AssociationOverride.php | 5 +- src/Builders/Traits/Queueable.php | 9 +- src/Relations/AssociationCache.php | 82 +++++++------------ .../ConcreteAssociationMapping.php | 9 ++ 4 files changed, 48 insertions(+), 57 deletions(-) create mode 100644 src/Relations/Mappings/Association/ConcreteAssociationMapping.php diff --git a/src/Builders/Overrides/AssociationOverride.php b/src/Builders/Overrides/AssociationOverride.php index 7c1ab2d..5366358 100644 --- a/src/Builders/Overrides/AssociationOverride.php +++ b/src/Builders/Overrides/AssociationOverride.php @@ -12,6 +12,7 @@ use Doctrine\ORM\Mapping\NamingStrategy; use InvalidArgumentException; use LaravelDoctrine\Fluent\Buildable; +use LaravelDoctrine\Fluent\Relations\AssociationCache; use LaravelDoctrine\Fluent\Relations\ManyToMany; use LaravelDoctrine\Fluent\Relations\ManyToOne; use LaravelDoctrine\Fluent\Relations\Relation; @@ -100,7 +101,9 @@ public function build() throw new InvalidArgumentException('The callback should return an instance of '.Relation::class); } - $association->build(); + $association instanceof AssociationCache ? + $association->build($source->targetEntity) : + $association->build(); $target = $this->convertToMappingArray($builder); diff --git a/src/Builders/Traits/Queueable.php b/src/Builders/Traits/Queueable.php index ae7daa4..a7a121a 100644 --- a/src/Builders/Traits/Queueable.php +++ b/src/Builders/Traits/Queueable.php @@ -4,6 +4,7 @@ use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Delay; +use LaravelDoctrine\Fluent\Relations\AssociationCache; trait Queueable { @@ -43,12 +44,16 @@ public function build() if ($buildable instanceof Delay) { $delayed[] = $buildable; } else { - $buildable->build(); + $buildable instanceof AssociationCache ? + $buildable->build($this->entity) : + $buildable->build(); } } foreach ($delayed as $buildable) { - $buildable->build(); + $buildable instanceof AssociationCache ? + $buildable->build($this->entity) : + $buildable->build(); } } diff --git a/src/Relations/AssociationCache.php b/src/Relations/AssociationCache.php index b025e27..748f01b 100644 --- a/src/Relations/AssociationCache.php +++ b/src/Relations/AssociationCache.php @@ -5,68 +5,48 @@ use Doctrine\ORM\Mapping\ClassMetadata; use InvalidArgumentException; use LaravelDoctrine\Fluent\Buildable; +use LaravelDoctrine\Fluent\Relations\Mappings\Association\ConcreteAssociationMapping; class AssociationCache implements Buildable { - /** - * @var string - */ - protected $region; + protected string $region; - /** - * @var string - */ - protected $usage; + protected string $usage; /** - * @var array + * @var array */ - protected $usages = [ + protected array $usages = [ 'READ_ONLY' => ClassMetadata::CACHE_USAGE_READ_ONLY, 'NONSTRICT_READ_WRITE' => ClassMetadata::CACHE_USAGE_NONSTRICT_READ_WRITE, 'READ_WRITE' => ClassMetadata::CACHE_USAGE_READ_WRITE, ]; - /** - * @var string - */ - protected $field; + protected string $field; - /** - * @var ClassMetadata - */ - protected $metadata; + protected ClassMetadata $metadata; - /** - * @param ClassMetadata $metadata - * @param string $field - * @param string|int $usage - * @param string|null $region - */ - public function __construct(ClassMetadata $metadata, $field, $usage = 'READ_ONLY', $region = null) - { - $this->field = $field; + public function __construct( + ClassMetadata $metadata, + string $field, + string|int $usage = 'READ_ONLY', + ?string $region = null + ) { + $this->field = $field; $this->metadata = $metadata; $this->setRegion($region); $this->setUsage($usage); } - /** - * @return string - */ - public function getUsage() + public function getUsage(): string { return $this->usage; } /** - * @param string $usage - * * @throws InvalidArgumentException - * - * @return AssociationCache */ - public function setUsage($usage) + public function setUsage(string|int $usage): self { if (is_int($usage)) { $this->validate($usage, $this->usages); @@ -80,20 +60,12 @@ public function setUsage($usage) return $this; } - /** - * @return string - */ - public function getRegion() + public function getRegion(): string { return $this->region; } - /** - * @param string $region - * - * @return AssociationCache - */ - public function setRegion($region) + public function setRegion(string $region): self { $this->region = $region; @@ -103,21 +75,23 @@ public function setRegion($region) /** * Execute the build process. */ - public function build() + public function build(string $targetEntity = ''): void { + if (!isset($this->metadata->associationMappings[$this->field])) { + $this->metadata->associationMappings[$this->field] = new ConcreteAssociationMapping( + $this->field, + $this->metadata->rootEntityName, + $targetEntity + ); + } + $this->metadata->enableAssociationCache($this->field, [ 'usage' => $this->getUsage(), 'region' => $this->getRegion(), ]); } - /** - * @param string|int $usage - * @param array $usages - * - * @return mixed - */ - protected function validate($usage, array $usages) + protected function validate(string|int $usage, array $usages): string|int { if (!in_array($usage, $usages)) { throw new InvalidArgumentException( diff --git a/src/Relations/Mappings/Association/ConcreteAssociationMapping.php b/src/Relations/Mappings/Association/ConcreteAssociationMapping.php new file mode 100644 index 0000000..c2c05f4 --- /dev/null +++ b/src/Relations/Mappings/Association/ConcreteAssociationMapping.php @@ -0,0 +1,9 @@ + Date: Thu, 7 Aug 2025 12:39:34 -0600 Subject: [PATCH 12/31] Types and formatting --- src/Extensions/Gedmo/Loggable.php | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/src/Extensions/Gedmo/Loggable.php b/src/Extensions/Gedmo/Loggable.php index 8428d32..53d33ad 100644 --- a/src/Extensions/Gedmo/Loggable.php +++ b/src/Extensions/Gedmo/Loggable.php @@ -2,6 +2,7 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Loggable\Mapping\Driver\Fluent; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Builder; @@ -10,24 +11,14 @@ class Loggable implements Buildable, Extension { - /** - * @var ExtensibleClassMetadata - */ - private $classMetadata; + private ExtensibleClassMetadata $classMetadata; - /** - * @var string|null - */ - private $logEntry; + private ?string $logEntry; - /** - * @param ExtensibleClassMetadata $classMetadata - * @param string|null $logEntry - */ - public function __construct(ExtensibleClassMetadata $classMetadata, $logEntry = null) + public function __construct(ExtensibleClassMetadata|ClassMetadata $classMetadata, ?string $logEntry = null) { $this->classMetadata = $classMetadata; - $this->logEntry = $logEntry; + $this->logEntry = $logEntry; } /** From cd03b8c901c2491c56f4eca37e98a375387a1e08 Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Thu, 7 Aug 2025 13:02:44 -0600 Subject: [PATCH 13/31] Minimum viable changes --- src/Builders/Field.php | 2 +- .../Overrides/AssociationOverride.php | 18 ++--- src/Builders/Overrides/AttributeOverride.php | 20 +++--- src/Builders/Traits/Queueable.php | 4 +- src/Extensions/Gedmo/Loggable.php | 18 +++-- src/FluentDriver.php | 2 +- src/Relations/AssociationCache.php | 67 ++++++++++++++----- src/Relations/JoinColumn.php | 28 ++++---- ...ensibleClassMetadataFactoryFactoryTest.php | 2 +- 9 files changed, 102 insertions(+), 59 deletions(-) diff --git a/src/Builders/Field.php b/src/Builders/Field.php index e040961..51eae76 100644 --- a/src/Builders/Field.php +++ b/src/Builders/Field.php @@ -93,7 +93,7 @@ protected function __construct(FieldBuilder $fieldBuilder, ClassMetadataBuilder * @param string $type * @param string $name * - * @throws \Doctrine\DBAL\DBALException + * @throws \Doctrine\DBAL\Exception * * @return Field */ diff --git a/src/Builders/Overrides/AssociationOverride.php b/src/Builders/Overrides/AssociationOverride.php index 5366358..fb9bbce 100644 --- a/src/Builders/Overrides/AssociationOverride.php +++ b/src/Builders/Overrides/AssociationOverride.php @@ -55,13 +55,13 @@ class AssociationOverride implements Buildable */ public function __construct( ClassMetadataBuilder $builder, - NamingStrategy $namingStrategy, - $name, - callable $callback + NamingStrategy $namingStrategy, + $name, + callable $callback ) { - $this->builder = $builder; - $this->callback = $callback; - $this->name = $name; + $this->builder = $builder; + $this->callback = $callback; + $this->name = $name; $this->namingStrategy = $namingStrategy; } @@ -73,7 +73,7 @@ public function build() $callback = $this->callback; // We will create a new class metadata builder instance, - // so we can use it to easily generate a new mapping + // so we can use it to easily generated a new mapping // array, without re-declaring the existing association $builder = $this->newClassMetadataBuilder(); $source = $this->convertToMappingArray($this->builder); @@ -93,7 +93,7 @@ public function build() $association = $callback($associationBuilder); - // When the user forgets to return, use the $associationBuilder instance + // When the user forget to return, use the $associationBuilder instance // which contains the same information $association = $association ?: $associationBuilder; @@ -202,7 +202,7 @@ protected function mapJoinTable(JoinTableMapping $target, JoinTableMapping $sour * @internal param $source * @internal param $overrideMapping */ - protected function mapJoinColumns(array $target, array $source) + protected function mapJoinColumns(array $target = [], array $source = []) { $joinColumns = []; foreach ($target as $index => $joinColumn) { diff --git a/src/Builders/Overrides/AttributeOverride.php b/src/Builders/Overrides/AttributeOverride.php index afab1cc..ad453a9 100644 --- a/src/Builders/Overrides/AttributeOverride.php +++ b/src/Builders/Overrides/AttributeOverride.php @@ -5,7 +5,6 @@ use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FieldMapping; -use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Mapping\NamingStrategy; use InvalidArgumentException; use LaravelDoctrine\Fluent\Buildable; @@ -41,13 +40,13 @@ class AttributeOverride implements Buildable */ public function __construct( ClassMetadataBuilder $builder, - NamingStrategy $namingStrategy, - $name, - callable $callback + NamingStrategy $namingStrategy, + $name, + callable $callback ) { - $this->builder = $builder; - $this->callback = $callback; - $this->name = $name; + $this->builder = $builder; + $this->callback = $callback; + $this->name = $name; $this->namingStrategy = $namingStrategy; } @@ -59,7 +58,7 @@ public function build() $callback = $this->callback; // We will create a new class metadata builder instance, - // so we can use it to easily generate a new mapping + // so we can use it to easily generated a new mapping // array, without re-declaring the existing field $builder = $this->newClassMetadataBuilder(); @@ -74,7 +73,7 @@ public function build() $field = $callback($fieldBuilder); - // When the user forgets to return, use the Field instance + // When the user forget to return, use the Field instance // which contains the same information $field = $field ?: $fieldBuilder; @@ -94,6 +93,7 @@ public function build() /** * @param ClassMetadataBuilder $builder + * @param FieldMapping $mapping * * @return Field */ @@ -109,7 +109,7 @@ protected function getFieldBuilder(ClassMetadataBuilder $builder, FieldMapping $ /** * @param ClassMetadataBuilder $builder * - * @throws MappingException + * @throws \Doctrine\ORM\Mapping\MappingException * * @return FieldMapping */ diff --git a/src/Builders/Traits/Queueable.php b/src/Builders/Traits/Queueable.php index a7a121a..b7a898d 100644 --- a/src/Builders/Traits/Queueable.php +++ b/src/Builders/Traits/Queueable.php @@ -51,9 +51,7 @@ public function build() } foreach ($delayed as $buildable) { - $buildable instanceof AssociationCache ? - $buildable->build($this->entity) : - $buildable->build(); + $buildable->build(); } } diff --git a/src/Extensions/Gedmo/Loggable.php b/src/Extensions/Gedmo/Loggable.php index 53d33ad..08bc535 100644 --- a/src/Extensions/Gedmo/Loggable.php +++ b/src/Extensions/Gedmo/Loggable.php @@ -11,14 +11,24 @@ class Loggable implements Buildable, Extension { - private ExtensibleClassMetadata $classMetadata; + /** + * @var ExtensibleClassMetadata + */ + private $classMetadata; - private ?string $logEntry; + /** + * @var string|null + */ + private $logEntry; - public function __construct(ExtensibleClassMetadata|ClassMetadata $classMetadata, ?string $logEntry = null) + /** + * @param ExtensibleClassMetadata|ClassMetadata $classMetadata + * @param string|null $logEntry + */ + public function __construct(ExtensibleClassMetadata $classMetadata, $logEntry = null) { $this->classMetadata = $classMetadata; - $this->logEntry = $logEntry; + $this->logEntry = $logEntry; } /** diff --git a/src/FluentDriver.php b/src/FluentDriver.php index 7254128..84d9165 100644 --- a/src/FluentDriver.php +++ b/src/FluentDriver.php @@ -3,9 +3,9 @@ namespace LaravelDoctrine\Fluent; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; +use Doctrine\ORM\Mapping\ClassMetadata as ORMClassMetadata; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Mapping\NamingStrategy; -use Doctrine\ORM\Mapping\ClassMetadata as ORMClassMetadata; use Doctrine\Persistence\Mapping\ClassMetadata; use Doctrine\Persistence\Mapping\Driver\MappingDriver; use InvalidArgumentException; diff --git a/src/Relations/AssociationCache.php b/src/Relations/AssociationCache.php index 748f01b..275b11e 100644 --- a/src/Relations/AssociationCache.php +++ b/src/Relations/AssociationCache.php @@ -9,9 +9,15 @@ class AssociationCache implements Buildable { - protected string $region; + /** + * @var string + */ + protected $region; - protected string $usage; + /** + * @var string + */ + protected $usage; /** * @var array @@ -22,31 +28,46 @@ class AssociationCache implements Buildable 'READ_WRITE' => ClassMetadata::CACHE_USAGE_READ_WRITE, ]; - protected string $field; + /** + * @var string + */ + protected $field; - protected ClassMetadata $metadata; + /** + * @var ClassMetadata + */ + protected $metadata; - public function __construct( - ClassMetadata $metadata, - string $field, - string|int $usage = 'READ_ONLY', - ?string $region = null - ) { - $this->field = $field; + /** + * @param ClassMetadata $metadata + * @param string $field + * @param string|int $usage + * @param string|null $region + */ + public function __construct(ClassMetadata $metadata, $field, $usage = 'READ_ONLY', $region = null) + { + $this->field = $field; $this->metadata = $metadata; $this->setRegion($region); $this->setUsage($usage); } - public function getUsage(): string + /** + * @return string + */ + public function getUsage() { return $this->usage; } /** + * @param string $usage + * * @throws InvalidArgumentException + * + * @return AssociationCache */ - public function setUsage(string|int $usage): self + public function setUsage($usage) { if (is_int($usage)) { $this->validate($usage, $this->usages); @@ -60,12 +81,20 @@ public function setUsage(string|int $usage): self return $this; } - public function getRegion(): string + /** + * @return string + */ + public function getRegion() { return $this->region; } - public function setRegion(string $region): self + /** + * @param string $region + * + * @return AssociationCache + */ + public function setRegion($region) { $this->region = $region; @@ -91,7 +120,13 @@ public function build(string $targetEntity = ''): void ]); } - protected function validate(string|int $usage, array $usages): string|int + /** + * @param string|int $usage + * @param array $usages + * + * @return mixed + */ + protected function validate($usage, array $usages) { if (!in_array($usage, $usages)) { throw new InvalidArgumentException( diff --git a/src/Relations/JoinColumn.php b/src/Relations/JoinColumn.php index 9558dfe..5625381 100644 --- a/src/Relations/JoinColumn.php +++ b/src/Relations/JoinColumn.php @@ -58,21 +58,21 @@ class JoinColumn */ public function __construct( NamingStrategy $namingStrategy, - $relation, - $joinColumn = null, - $referenceColumn = null, - $nullable = true, - $unique = false, - $onDelete = null, - $columnDefinition = null + $relation, + $joinColumn = null, + $referenceColumn = null, + $nullable = true, + $unique = false, + $onDelete = null, + $columnDefinition = null ) { - $this->namingStrategy = $namingStrategy; - $this->relation = $relation; - $this->joinColumn = $joinColumn; - $this->referenceColumn = $referenceColumn; - $this->nullable = $nullable; - $this->unique = $unique; - $this->onDelete = $onDelete; + $this->namingStrategy = $namingStrategy; + $this->relation = $relation; + $this->joinColumn = $joinColumn; + $this->referenceColumn = $referenceColumn; + $this->nullable = $nullable; + $this->unique = $unique; + $this->onDelete = $onDelete; $this->columnDefinition = $columnDefinition; } diff --git a/tests/Extensions/ExtensibleClassMetadataFactoryFactoryTest.php b/tests/Extensions/ExtensibleClassMetadataFactoryFactoryTest.php index c6e297e..42f78b6 100644 --- a/tests/Extensions/ExtensibleClassMetadataFactoryFactoryTest.php +++ b/tests/Extensions/ExtensibleClassMetadataFactoryFactoryTest.php @@ -22,7 +22,7 @@ public function test_it_builds_extensible_class_metadata_objects() $em->shouldReceive('getConfiguration')->twice()->andReturn($config); $config->shouldReceive('getNamingStrategy')->once()->andReturn($namingStrategy); - $config->shouldReceive('isNativeLazyObjectsEnabled')->once()->andReturn(true); + $config->shouldReceive('isNativeLazyObjectsEnabled')->once()->andReturn(false); $factory = new ExtensionFactoryTest(); $factory->setEntityManager($em); From 89d61d99b66f4068431f86af1ab7f7e1ad8fed39 Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Thu, 7 Aug 2025 13:04:00 -0600 Subject: [PATCH 14/31] Extra type --- tests/Extensions/ExtensibleClassMetadataFactoryFactoryTest.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/Extensions/ExtensibleClassMetadataFactoryFactoryTest.php b/tests/Extensions/ExtensibleClassMetadataFactoryFactoryTest.php index 42f78b6..384e8be 100644 --- a/tests/Extensions/ExtensibleClassMetadataFactoryFactoryTest.php +++ b/tests/Extensions/ExtensibleClassMetadataFactoryFactoryTest.php @@ -4,6 +4,7 @@ use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManager; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\NamingStrategy; use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadataFactory; @@ -37,7 +38,7 @@ class ExtensionFactoryTest extends ExtensibleClassMetadataFactory * This is the only sane way of testing the small part of what we do in this factory. * Every other test would require infinite mocking. * - * @return ExtensibleClassMetadata + * @return ExtensibleClassMetadata|ClassMetadata */ public function getClassMetadataInstance() { From 425fad3a0d6c432b1ec47fad233088673a3512db Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Thu, 7 Aug 2025 13:17:56 -0600 Subject: [PATCH 15/31] Misc --- .docker/conf/xdebug.ini | 2 +- src/Builders/Overrides/AssociationOverride.php | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.docker/conf/xdebug.ini b/.docker/conf/xdebug.ini index a8be81f..ff5e70d 100644 --- a/.docker/conf/xdebug.ini +++ b/.docker/conf/xdebug.ini @@ -5,4 +5,4 @@ xdebug.start_with_request=yes xdebug.log=/dev/stdout xdebug.log_level=0 xdebug.client_port=9003 -xdebug.client_host=host.docker.internal \ No newline at end of file +xdebug.client_host=host.docker.internal diff --git a/src/Builders/Overrides/AssociationOverride.php b/src/Builders/Overrides/AssociationOverride.php index fb9bbce..c71450d 100644 --- a/src/Builders/Overrides/AssociationOverride.php +++ b/src/Builders/Overrides/AssociationOverride.php @@ -8,7 +8,6 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\JoinColumnMapping; use Doctrine\ORM\Mapping\JoinTableMapping; -use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Mapping\NamingStrategy; use InvalidArgumentException; use LaravelDoctrine\Fluent\Buildable; @@ -134,7 +133,7 @@ public function build() /** * @param ClassMetadataBuilder $builder * - * @throws MappingException + * @throws \Doctrine\ORM\Mapping\MappingException * * @return AssociationMapping */ From f1d2e7aa7621576b883c29e8fbed81ee8137e16e Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Thu, 7 Aug 2025 13:27:36 -0600 Subject: [PATCH 16/31] Type undo --- src/Relations/AssociationCache.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Relations/AssociationCache.php b/src/Relations/AssociationCache.php index 275b11e..38d41a5 100644 --- a/src/Relations/AssociationCache.php +++ b/src/Relations/AssociationCache.php @@ -22,7 +22,7 @@ class AssociationCache implements Buildable /** * @var array */ - protected array $usages = [ + protected $usages = [ 'READ_ONLY' => ClassMetadata::CACHE_USAGE_READ_ONLY, 'NONSTRICT_READ_WRITE' => ClassMetadata::CACHE_USAGE_NONSTRICT_READ_WRITE, 'READ_WRITE' => ClassMetadata::CACHE_USAGE_READ_WRITE, From 4b356603087fad9bda293c337d686700a6a776a9 Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Thu, 7 Aug 2025 13:35:27 -0600 Subject: [PATCH 17/31] CI suggestions --- src/Builders/GeneratedValue.php | 2 +- src/Builders/Overrides/AssociationOverride.php | 2 +- src/Builders/Overrides/AttributeOverride.php | 2 +- src/Extensions/Gedmo/Sluggable.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Builders/GeneratedValue.php b/src/Builders/GeneratedValue.php index 86b6efb..59611bf 100644 --- a/src/Builders/GeneratedValue.php +++ b/src/Builders/GeneratedValue.php @@ -44,7 +44,7 @@ class GeneratedValue implements Buildable protected $classMetadata; /** - * @param FieldBuilder $builder + * @param FieldBuilder $builder * @param ClassMetadata $classMetadata */ public function __construct(FieldBuilder $builder, ClassMetadata $classMetadata) diff --git a/src/Builders/Overrides/AssociationOverride.php b/src/Builders/Overrides/AssociationOverride.php index c71450d..0ed20e6 100644 --- a/src/Builders/Overrides/AssociationOverride.php +++ b/src/Builders/Overrides/AssociationOverride.php @@ -206,7 +206,7 @@ protected function mapJoinColumns(array $target = [], array $source = []) $joinColumns = []; foreach ($target as $index => $joinColumn) { if (isset($source[$index])) { - $diff = array_diff((array)$joinColumn, (array)$source[$index]); + $diff = array_diff((array) $joinColumn, (array) $source[$index]); if (!empty($diff)) { $joinColumns[] = $diff; diff --git a/src/Builders/Overrides/AttributeOverride.php b/src/Builders/Overrides/AttributeOverride.php index ad453a9..1052849 100644 --- a/src/Builders/Overrides/AttributeOverride.php +++ b/src/Builders/Overrides/AttributeOverride.php @@ -87,7 +87,7 @@ public function build() $this->builder->getClassMetadata()->setAttributeOverride( $this->name, - $this->mergeRecursively((array)$source, (array)$target) + $this->mergeRecursively((array) $source, (array) $target) ); } diff --git a/src/Extensions/Gedmo/Sluggable.php b/src/Extensions/Gedmo/Sluggable.php index a436ec0..8517e42 100644 --- a/src/Extensions/Gedmo/Sluggable.php +++ b/src/Extensions/Gedmo/Sluggable.php @@ -258,7 +258,7 @@ public function suffix($suffix) * Checks if $field type is valid as Sluggable field. * * @param ClassMetadata $meta - * @param string $field + * @param string $field * * @throws InvalidArgumentException * From 6a4c9cf507b8cbf2aa53e019c301903fad0acfae Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Thu, 7 Aug 2025 15:12:14 -0600 Subject: [PATCH 18/31] Review updates --- Dockerfile | 13 +------------ docker-compose.yaml | 4 ---- .../Association/ConcreteAssociationMapping.php | 3 +++ 3 files changed, 4 insertions(+), 16 deletions(-) diff --git a/Dockerfile b/Dockerfile index f5d0216..10f8e23 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,22 +16,11 @@ RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local # Install Xdebug RUN pecl install xdebug && docker-php-ext-enable xdebug -# Configure Xdebug for PhpStorm -RUN echo "[xdebug]" >> /usr/local/etc/php/conf.d/xdebug.ini \ - && echo "xdebug.mode=debug" >> /usr/local/etc/php/conf.d/xdebug.ini \ - && echo "xdebug.start_with_request=yes" >> /usr/local/etc/php/conf.d/xdebug.ini \ - && echo "xdebug.client_host=host.docker.internal" >> /usr/local/etc/php/conf.d/xdebug.ini \ - && echo "xdebug.client_port=9003" >> /usr/local/etc/php/conf.d/xdebug.ini \ - && echo "xdebug.log=/tmp/xdebug.log" >> /usr/local/etc/php/conf.d/xdebug.ini - # Set working directory WORKDIR /var/www/html/laravel-doctrine-fluent -# Copy application code -COPY . /var/www/html/laravel-doctrine-fluent - # Install Laravel dependencies -RUN composer install --no-interaction --optimize-autoloader --no-dev || true +RUN composer install --no-interaction --optimize-autoloader --dev || true # Expose port for Laravel development server EXPOSE 8000 diff --git a/docker-compose.yaml b/docker-compose.yaml index 49c81ee..b67e754 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -15,7 +15,3 @@ services: - PHP_IDE_CONFIG=serverName=laravel-doctrine-fluent networks: - app-network - -networks: - app-network: - driver: bridge diff --git a/src/Relations/Mappings/Association/ConcreteAssociationMapping.php b/src/Relations/Mappings/Association/ConcreteAssociationMapping.php index c2c05f4..2baf62f 100644 --- a/src/Relations/Mappings/Association/ConcreteAssociationMapping.php +++ b/src/Relations/Mappings/Association/ConcreteAssociationMapping.php @@ -4,6 +4,9 @@ use Doctrine\ORM\Mapping\AssociationMapping; +/** + * This serves the purpose of creating a generic AssociationMapping. + */ class ConcreteAssociationMapping extends AssociationMapping { } From 0de1c652837381503ddbb610cb66c94598aa26f7 Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Thu, 7 Aug 2025 15:22:07 -0600 Subject: [PATCH 19/31] Review updates --- docker-compose.yaml | 2 -- src/Relations/JoinColumn.php | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index b67e754..536b81a 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -13,5 +13,3 @@ services: - XDEBUG_MODE=debug - XDEBUG_CONFIG=client_host=host.docker.internal client_port=9003 - PHP_IDE_CONFIG=serverName=laravel-doctrine-fluent - networks: - - app-network diff --git a/src/Relations/JoinColumn.php b/src/Relations/JoinColumn.php index 5625381..b681e45 100644 --- a/src/Relations/JoinColumn.php +++ b/src/Relations/JoinColumn.php @@ -125,7 +125,7 @@ public function source($localKey) */ public function getJoinColumn() { - return $this->joinColumn ?: $this->namingStrategy->joinColumnName($this->relation, $this->relation); + return $this->joinColumn ?: $this->namingStrategy->joinColumnName($this->relation, ''); } /** From 5cbfd5905ada3930dd61e03f1c772cebc4517084 Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Thu, 7 Aug 2025 16:07:14 -0600 Subject: [PATCH 20/31] Don't need the unzip --- Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 10f8e23..3179c40 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,6 @@ FROM php:8.1-apache # Install system dependencies RUN apt-get update && apt-get install -y \ git \ - unzip \ libzip-dev \ && docker-php-ext-install zip \ && apt-get clean \ From dcc33811bd8f12786dd67d922e69ea8ab213511f Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Fri, 8 Aug 2025 08:57:28 -0600 Subject: [PATCH 21/31] Update composer.json for pulling in as dev dependency --- composer.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 575cd88..d60b986 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,6 @@ { - "name": "laravel-doctrine/fluent", + "name": "activated-insights/laravel-doctrine-fluent", + "version": "dev-orm-3.1-update", "description": "A fluent PHP mapping driver for Doctrine2.", "license": "MIT", "keywords": [ From 2f85a5e8238d36c7962fbaddbd605e68d99ad2b8 Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Fri, 8 Aug 2025 11:18:41 -0600 Subject: [PATCH 22/31] Testing ExtensibleClassMetadata stuff --- src/Builders/Field.php | 3 +-- src/Extensions/ExtensibleClassMetadataFactory.php | 3 +-- src/Extensions/Gedmo/AbstractTrackingExtension.php | 10 +++------- src/Extensions/Gedmo/Locale.php | 10 +++++----- src/Extensions/Gedmo/Loggable.php | 7 +++---- src/Extensions/Gedmo/Sluggable.php | 11 +++++------ src/Extensions/Gedmo/SoftDeleteable.php | 10 +++++----- src/Extensions/Gedmo/SortableGroup.php | 10 +++++----- src/Extensions/Gedmo/SortablePosition.php | 10 +++++----- src/Extensions/Gedmo/Translatable.php | 10 +++++----- src/Extensions/Gedmo/TranslationClass.php | 10 +++++----- src/Extensions/Gedmo/TreeLeft.php | 10 +++++----- src/Extensions/Gedmo/TreeLevel.php | 10 +++++----- src/Extensions/Gedmo/TreePath.php | 12 ++++++------ src/Extensions/Gedmo/TreePathHash.php | 10 +++++----- src/Extensions/Gedmo/TreePathSource.php | 10 +++++----- src/Extensions/Gedmo/TreeRight.php | 8 ++++---- src/Extensions/Gedmo/TreeSelfReference.php | 12 ++++++------ src/Extensions/Gedmo/TreeStrategy.php | 4 ++-- src/Extensions/Gedmo/Uploadable.php | 8 ++++---- src/Extensions/Gedmo/UploadableFile.php | 12 ++++++------ src/Extensions/Gedmo/Versioned.php | 10 +++++----- src/Relations/AbstractRelation.php | 4 ++-- .../ExtensibleClassMetadataFactoryFactoryTest.php | 2 +- 24 files changed, 99 insertions(+), 107 deletions(-) diff --git a/src/Builders/Field.php b/src/Builders/Field.php index 51eae76..bf56cbd 100644 --- a/src/Builders/Field.php +++ b/src/Builders/Field.php @@ -11,7 +11,6 @@ use LaravelDoctrine\Fluent\Builders\Traits\Macroable; use LaravelDoctrine\Fluent\Builders\Traits\Queueable; use LaravelDoctrine\Fluent\Builders\Traits\QueuesMacros; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Extensions\Gedmo\GedmoFieldHints; /** @@ -123,7 +122,7 @@ public function getType() } /** - * @return ClassMetadata|ExtensibleClassMetadata + * @return ClassMetadata */ public function getClassMetadata() { diff --git a/src/Extensions/ExtensibleClassMetadataFactory.php b/src/Extensions/ExtensibleClassMetadataFactory.php index 841e998..5a709be 100644 --- a/src/Extensions/ExtensibleClassMetadataFactory.php +++ b/src/Extensions/ExtensibleClassMetadataFactory.php @@ -3,7 +3,6 @@ namespace LaravelDoctrine\Fluent\Extensions; use Doctrine\ORM\EntityManagerInterface; -use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataFactory; class ExtensibleClassMetadataFactory extends ClassMetadataFactory @@ -23,7 +22,7 @@ public function setEntityManager(EntityManagerInterface $em): void /** * Override to implement our custom ClassMetadata object. */ - protected function newClassMetadataInstance(string $className): ClassMetadata + protected function newClassMetadataInstance(string $className): ExtensibleClassMetadata { return new ExtensibleClassMetadata($className, $this->entityManager->getConfiguration()->getNamingStrategy()); } diff --git a/src/Extensions/Gedmo/AbstractTrackingExtension.php b/src/Extensions/Gedmo/AbstractTrackingExtension.php index 1b98dff..69bb4ca 100644 --- a/src/Extensions/Gedmo/AbstractTrackingExtension.php +++ b/src/Extensions/Gedmo/AbstractTrackingExtension.php @@ -2,13 +2,13 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Exception\InvalidMappingException; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; abstract class AbstractTrackingExtension { /** - * @var ExtensibleClassMetadata + * @var ClassMetadata */ protected $classMetadata; @@ -39,11 +39,7 @@ abstract class AbstractTrackingExtension */ abstract protected function getExtensionName(); - /** - * @param ExtensibleClassMetadata $classMetadata - * @param string $fieldName - */ - public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) + public function __construct(ClassMetadata $classMetadata, string $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/Locale.php b/src/Extensions/Gedmo/Locale.php index 7d27e17..e1bf981 100644 --- a/src/Extensions/Gedmo/Locale.php +++ b/src/Extensions/Gedmo/Locale.php @@ -2,12 +2,12 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Exception\InvalidMappingException; use Gedmo\Translatable\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Builder; use LaravelDoctrine\Fluent\Builders\Delay; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Extensions\Extension; class Locale implements Buildable, Extension, Delay @@ -15,7 +15,7 @@ class Locale implements Buildable, Extension, Delay const MACRO_METHOD = 'locale'; /** - * @var ExtensibleClassMetadata + * @var ClassMetadata */ private $classMetadata; @@ -27,10 +27,10 @@ class Locale implements Buildable, Extension, Delay /** * Locale constructor. * - * @param ExtensibleClassMetadata $classMetadata - * @param string $fieldName + * @param ClassMetadata $classMetadata + * @param string $fieldName */ - public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) + public function __construct(ClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/Loggable.php b/src/Extensions/Gedmo/Loggable.php index 08bc535..c509a60 100644 --- a/src/Extensions/Gedmo/Loggable.php +++ b/src/Extensions/Gedmo/Loggable.php @@ -6,13 +6,12 @@ use Gedmo\Loggable\Mapping\Driver\Fluent; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Builder; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Extensions\Extension; class Loggable implements Buildable, Extension { /** - * @var ExtensibleClassMetadata + * @var ClassMetadata */ private $classMetadata; @@ -22,10 +21,10 @@ class Loggable implements Buildable, Extension private $logEntry; /** - * @param ExtensibleClassMetadata|ClassMetadata $classMetadata + * @param ClassMetadata $classMetadata * @param string|null $logEntry */ - public function __construct(ExtensibleClassMetadata $classMetadata, $logEntry = null) + public function __construct(ClassMetadata $classMetadata, $logEntry = null) { $this->classMetadata = $classMetadata; $this->logEntry = $logEntry; diff --git a/src/Extensions/Gedmo/Sluggable.php b/src/Extensions/Gedmo/Sluggable.php index 8517e42..cc27a1a 100644 --- a/src/Extensions/Gedmo/Sluggable.php +++ b/src/Extensions/Gedmo/Sluggable.php @@ -7,7 +7,6 @@ use Gedmo\Sluggable\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Extensions\Extension; class Sluggable implements Buildable, Extension @@ -15,7 +14,7 @@ class Sluggable implements Buildable, Extension const MACRO_METHOD = 'sluggable'; /** - * @var ExtensibleClassMetadata + * @var ClassMetadata */ protected $classMetadata; @@ -89,11 +88,11 @@ class Sluggable implements Buildable, Extension ]; /** - * @param ExtensibleClassMetadata $classMetadata - * @param string $fieldName - * @param array|string $fields + * @param ClassMetadata $classMetadata + * @param string $fieldName + * @param array|string $fields */ - public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName, $fields) + public function __construct(ClassMetadata $classMetadata, $fieldName, $fields) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/SoftDeleteable.php b/src/Extensions/Gedmo/SoftDeleteable.php index 83711bf..bef1caa 100644 --- a/src/Extensions/Gedmo/SoftDeleteable.php +++ b/src/Extensions/Gedmo/SoftDeleteable.php @@ -2,11 +2,11 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\SoftDeleteable\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Builder; use LaravelDoctrine\Fluent\Builders\Field; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Extensions\Extension; class SoftDeleteable implements Buildable, Extension @@ -14,7 +14,7 @@ class SoftDeleteable implements Buildable, Extension const MACRO_METHOD = 'softDelete'; /** - * @var ExtensibleClassMetadata + * @var ClassMetadata */ protected $classMetadata; @@ -34,10 +34,10 @@ class SoftDeleteable implements Buildable, Extension protected $timeAware = false; /** - * @param ExtensibleClassMetadata $classMetadata - * @param string $fieldName + * @param ClassMetadata $classMetadata + * @param string $fieldName */ - public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) + public function __construct(ClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/SortableGroup.php b/src/Extensions/Gedmo/SortableGroup.php index e59a24d..6d97991 100644 --- a/src/Extensions/Gedmo/SortableGroup.php +++ b/src/Extensions/Gedmo/SortableGroup.php @@ -2,10 +2,10 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Sortable\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Relations\ManyToMany; use LaravelDoctrine\Fluent\Relations\ManyToOne; @@ -14,7 +14,7 @@ class SortableGroup implements Buildable const MACRO_METHOD = 'sortableGroup'; /** - * @var ExtensibleClassMetadata + * @var ClassMetadata */ protected $classMetadata; @@ -24,10 +24,10 @@ class SortableGroup implements Buildable protected $fieldName; /** - * @param ExtensibleClassMetadata $classMetadata - * @param string $fieldName + * @param ClassMetadata $classMetadata + * @param string $fieldName */ - public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) + public function __construct(ClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/SortablePosition.php b/src/Extensions/Gedmo/SortablePosition.php index 0364484..b0e5ebb 100644 --- a/src/Extensions/Gedmo/SortablePosition.php +++ b/src/Extensions/Gedmo/SortablePosition.php @@ -2,17 +2,17 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Sortable\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; class SortablePosition implements Buildable { const MACRO_METHOD = 'sortablePosition'; /** - * @var ExtensibleClassMetadata + * @var ClassMetadata */ protected $classMetadata; @@ -22,10 +22,10 @@ class SortablePosition implements Buildable protected $fieldName; /** - * @param ExtensibleClassMetadata $classMetadata - * @param string $fieldName + * @param ClassMetadata $classMetadata + * @param string $fieldName */ - public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) + public function __construct(ClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/Translatable.php b/src/Extensions/Gedmo/Translatable.php index dd2f02f..d3b2717 100644 --- a/src/Extensions/Gedmo/Translatable.php +++ b/src/Extensions/Gedmo/Translatable.php @@ -2,10 +2,10 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Translatable\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Extensions\Extension; class Translatable implements Buildable, Extension @@ -13,7 +13,7 @@ class Translatable implements Buildable, Extension const MACRO_METHOD = 'translatable'; /** - * @var ExtensibleClassMetadata + * @var ClassMetadata */ protected $classMetadata; @@ -23,10 +23,10 @@ class Translatable implements Buildable, Extension protected $fieldName; /** - * @param ExtensibleClassMetadata $classMetadata - * @param string $fieldName + * @param ClassMetadata $classMetadata + * @param string $fieldName */ - public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) + public function __construct(ClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/TranslationClass.php b/src/Extensions/Gedmo/TranslationClass.php index d4b28c6..661348a 100644 --- a/src/Extensions/Gedmo/TranslationClass.php +++ b/src/Extensions/Gedmo/TranslationClass.php @@ -2,17 +2,17 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Translatable\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Builder; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; class TranslationClass implements Buildable { const MACRO_METHOD = 'translationClass'; /** - * @var ExtensibleClassMetadata + * @var ClassMetadata */ private $classMetadata; @@ -24,10 +24,10 @@ class TranslationClass implements Buildable /** * Locale constructor. * - * @param ExtensibleClassMetadata $classMetadata - * @param string $class + * @param ClassMetadata $classMetadata + * @param string $class */ - public function __construct(ExtensibleClassMetadata $classMetadata, $class) + public function __construct(ClassMetadata $classMetadata, $class) { $this->classMetadata = $classMetadata; $this->class = $class; diff --git a/src/Extensions/Gedmo/TreeLeft.php b/src/Extensions/Gedmo/TreeLeft.php index 0f0f789..2f8af8b 100644 --- a/src/Extensions/Gedmo/TreeLeft.php +++ b/src/Extensions/Gedmo/TreeLeft.php @@ -2,19 +2,19 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Exception\InvalidMappingException; use Gedmo\Tree\Mapping\Driver\Fluent as FluentDriver; use Gedmo\Tree\Mapping\Validator; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; class TreeLeft implements Buildable { const MACRO_METHOD = 'treeLeft'; /** - * @var ExtensibleClassMetadata + * @var ClassMetadata */ protected $classMetadata; @@ -24,10 +24,10 @@ class TreeLeft implements Buildable protected $fieldName; /** - * @param ExtensibleClassMetadata $classMetadata - * @param string $fieldName + * @param ClassMetadata $classMetadata + * @param string $fieldName */ - public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) + public function __construct(ClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/TreeLevel.php b/src/Extensions/Gedmo/TreeLevel.php index ee209f5..48c182a 100644 --- a/src/Extensions/Gedmo/TreeLevel.php +++ b/src/Extensions/Gedmo/TreeLevel.php @@ -2,19 +2,19 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Exception\InvalidMappingException; use Gedmo\Tree\Mapping\Driver\Fluent as FluentDriver; use Gedmo\Tree\Mapping\Validator; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; class TreeLevel implements Buildable { const MACRO_METHOD = 'treeLevel'; /** - * @var ExtensibleClassMetadata + * @var ClassMetadata */ protected $classMetadata; @@ -24,10 +24,10 @@ class TreeLevel implements Buildable protected $fieldName; /** - * @param ExtensibleClassMetadata $classMetadata - * @param string $fieldName + * @param ClassMetadata $classMetadata + * @param string $fieldName */ - public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) + public function __construct(ClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/TreePath.php b/src/Extensions/Gedmo/TreePath.php index 2151759..8956420 100644 --- a/src/Extensions/Gedmo/TreePath.php +++ b/src/Extensions/Gedmo/TreePath.php @@ -2,11 +2,11 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Exception\InvalidMappingException; use Gedmo\Tree\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; class TreePath implements Buildable { @@ -15,7 +15,7 @@ class TreePath implements Buildable const DEFAULT_SEPARATOR = '|'; /** - * @var ExtensibleClassMetadata + * @var ClassMetadata */ protected $classMetadata; @@ -45,11 +45,11 @@ class TreePath implements Buildable protected $endsWithSeparator = true; /** - * @param ExtensibleClassMetadata $classMetadata - * @param string $fieldName - * @param string $separator + * @param ClassMetadata $classMetadata + * @param string $fieldName + * @param string $separator */ - public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName, $separator = self::DEFAULT_SEPARATOR) + public function __construct(ClassMetadata $classMetadata, $fieldName, $separator = self::DEFAULT_SEPARATOR) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/TreePathHash.php b/src/Extensions/Gedmo/TreePathHash.php index 0db437a..ed722fa 100644 --- a/src/Extensions/Gedmo/TreePathHash.php +++ b/src/Extensions/Gedmo/TreePathHash.php @@ -2,17 +2,17 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Tree\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; class TreePathHash implements Buildable { const MACRO_METHOD = 'treePathHash'; /** - * @var ExtensibleClassMetadata + * @var ClassMetadata */ protected $classMetadata; @@ -22,10 +22,10 @@ class TreePathHash implements Buildable protected $fieldName; /** - * @param ExtensibleClassMetadata $classMetadata - * @param string $fieldName + * @param ClassMetadata $classMetadata + * @param string $fieldName */ - public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) + public function __construct(ClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/TreePathSource.php b/src/Extensions/Gedmo/TreePathSource.php index b64fa70..5d97c27 100644 --- a/src/Extensions/Gedmo/TreePathSource.php +++ b/src/Extensions/Gedmo/TreePathSource.php @@ -2,19 +2,19 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Exception\InvalidMappingException; use Gedmo\Tree\Mapping\Driver\Fluent as FluentDriver; use Gedmo\Tree\Mapping\Validator; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; class TreePathSource implements Buildable { const MACRO_METHOD = 'treePathSource'; /** - * @var ExtensibleClassMetadata + * @var ClassMetadata */ protected $classMetadata; @@ -24,10 +24,10 @@ class TreePathSource implements Buildable protected $fieldName; /** - * @param ExtensibleClassMetadata $classMetadata - * @param string $fieldName + * @param ClassMetadata $classMetadata + * @param string $fieldName */ - public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) + public function __construct(ClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/TreeRight.php b/src/Extensions/Gedmo/TreeRight.php index a137cf3..5704862 100644 --- a/src/Extensions/Gedmo/TreeRight.php +++ b/src/Extensions/Gedmo/TreeRight.php @@ -2,19 +2,19 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Exception\InvalidMappingException; use Gedmo\Tree\Mapping\Driver\Fluent as FluentDriver; use Gedmo\Tree\Mapping\Validator; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; class TreeRight implements Buildable { const MACRO_METHOD = 'treeRight'; /** - * @var ExtensibleClassMetadata + * @var ClassMetadata */ protected $classMetadata; @@ -24,10 +24,10 @@ class TreeRight implements Buildable protected $fieldName; /** - * @param ExtensibleClassMetadata $classMetadata + * @param ClassMetadata $classMetadata * @param string $fieldName */ - public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) + public function __construct(ClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/TreeSelfReference.php b/src/Extensions/Gedmo/TreeSelfReference.php index 11f7569..c7750c7 100644 --- a/src/Extensions/Gedmo/TreeSelfReference.php +++ b/src/Extensions/Gedmo/TreeSelfReference.php @@ -2,16 +2,16 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Tree\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Relations\ManyToOne; class TreeSelfReference implements Buildable { /** - * @var ExtensibleClassMetadata + * @var ClassMetadata */ protected $classMetadata; @@ -26,11 +26,11 @@ class TreeSelfReference implements Buildable private $key; /** - * @param ExtensibleClassMetadata $classMetadata - * @param string $fieldName - * @param string $key + * @param ClassMetadata $classMetadata + * @param string $fieldName + * @param string $key */ - public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName, $key) + public function __construct(ClassMetadata $classMetadata, $fieldName, $key) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/TreeStrategy.php b/src/Extensions/Gedmo/TreeStrategy.php index 5787833..1bdc7d0 100644 --- a/src/Extensions/Gedmo/TreeStrategy.php +++ b/src/Extensions/Gedmo/TreeStrategy.php @@ -2,10 +2,10 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Exception\InvalidMappingException; use Gedmo\Tree\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Extensions\Extension; use LaravelDoctrine\Fluent\Fluent; @@ -142,7 +142,7 @@ protected function addSelfReferencingRelation($field, ?callable $callback = null } /** - * @return ExtensibleClassMetadata + * @return ClassMetadata */ protected function getClassMetadata() { diff --git a/src/Extensions/Gedmo/Uploadable.php b/src/Extensions/Gedmo/Uploadable.php index d48ccf9..101e1a0 100644 --- a/src/Extensions/Gedmo/Uploadable.php +++ b/src/Extensions/Gedmo/Uploadable.php @@ -2,12 +2,12 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Uploadable\Mapping\Driver\Fluent as UploadableDriver; use Gedmo\Uploadable\Mapping\Validator; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Builder; use LaravelDoctrine\Fluent\Builders\Delay; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Extensions\Extension; class Uploadable implements Buildable, Delay, Extension @@ -60,14 +60,14 @@ class Uploadable implements Buildable, Delay, Extension private $disallowedTypes = ''; /** - * @var ExtensibleClassMetadata + * @var ClassMetadata */ private $classMetadata; /** - * @param ExtensibleClassMetadata $classMetadata + * @param ClassMetadata $classMetadata */ - public function __construct(ExtensibleClassMetadata $classMetadata) + public function __construct(ClassMetadata $classMetadata) { $this->classMetadata = $classMetadata; } diff --git a/src/Extensions/Gedmo/UploadableFile.php b/src/Extensions/Gedmo/UploadableFile.php index cf391ef..d31ec83 100644 --- a/src/Extensions/Gedmo/UploadableFile.php +++ b/src/Extensions/Gedmo/UploadableFile.php @@ -2,16 +2,16 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Exception\InvalidMappingException; use Gedmo\Uploadable\Mapping\Driver\Fluent as UploadableDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; class UploadableFile implements Buildable { /** - * @var ExtensibleClassMetadata + * @var ClassMetadata */ private $classMetadata; @@ -33,11 +33,11 @@ class UploadableFile implements Buildable /** * UploadableFile constructor. * - * @param ExtensibleClassMetadata $classMetadata - * @param string $fieldName - * @param string $type + * @param ClassMetadata $classMetadata + * @param string $fieldName + * @param string $type */ - public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName, $type = 'Name') + public function __construct(ClassMetadata $classMetadata, $fieldName, $type = 'Name') { $this->validateType($type); diff --git a/src/Extensions/Gedmo/Versioned.php b/src/Extensions/Gedmo/Versioned.php index f435b76..32412bd 100644 --- a/src/Extensions/Gedmo/Versioned.php +++ b/src/Extensions/Gedmo/Versioned.php @@ -2,10 +2,10 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Loggable\Mapping\Driver\Fluent; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Relations\ManyToOne; use LaravelDoctrine\Fluent\Relations\OneToOne; @@ -14,7 +14,7 @@ class Versioned implements Buildable const MACRO_METHOD = 'versioned'; /** - * @var ExtensibleClassMetadata + * @var ClassMetadata */ private $classMetadata; @@ -26,10 +26,10 @@ class Versioned implements Buildable /** * Versioned constructor. * - * @param ExtensibleClassMetadata $classMetadata - * @param string $fieldName + * @param ClassMetadata $classMetadata + * @param string $fieldName */ - public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) + public function __construct(ClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Relations/AbstractRelation.php b/src/Relations/AbstractRelation.php index 6e23714..6896390 100644 --- a/src/Relations/AbstractRelation.php +++ b/src/Relations/AbstractRelation.php @@ -6,10 +6,10 @@ use Doctrine\Inflector\InflectorFactory; use Doctrine\ORM\Mapping\Builder\AssociationBuilder; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\NamingStrategy; use InvalidArgumentException; use LaravelDoctrine\Fluent\Builders\Traits\Queueable; -use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; /** * @method $this orphanRemoval() @@ -125,7 +125,7 @@ public function getBuilder() } /** - * @return \Doctrine\ORM\Mapping\ClassMetadata|ExtensibleClassMetadata + * @return ClassMetadata */ public function getClassMetadata() { diff --git a/tests/Extensions/ExtensibleClassMetadataFactoryFactoryTest.php b/tests/Extensions/ExtensibleClassMetadataFactoryFactoryTest.php index 384e8be..a9121d4 100644 --- a/tests/Extensions/ExtensibleClassMetadataFactoryFactoryTest.php +++ b/tests/Extensions/ExtensibleClassMetadataFactoryFactoryTest.php @@ -38,7 +38,7 @@ class ExtensionFactoryTest extends ExtensibleClassMetadataFactory * This is the only sane way of testing the small part of what we do in this factory. * Every other test would require infinite mocking. * - * @return ExtensibleClassMetadata|ClassMetadata + * @return ExtensibleClassMetadata */ public function getClassMetadataInstance() { From 2becff4e13db5d5241117760ecc3e0df8cb1dc43 Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Fri, 8 Aug 2025 11:32:41 -0600 Subject: [PATCH 23/31] Testing ExtensibleClassMetadata stuff --- composer.json | 2 +- src/Builders/Field.php | 12 ++++++++---- .../Gedmo/AbstractTrackingExtension.php | 10 +++++++--- src/Extensions/Gedmo/Locale.php | 10 +++++----- src/Extensions/Gedmo/Loggable.php | 10 +++++----- src/Extensions/Gedmo/Sluggable.php | 19 ++++++++++--------- src/Extensions/Gedmo/SoftDeleteable.php | 10 +++++----- src/Extensions/Gedmo/SortableGroup.php | 10 +++++----- src/Extensions/Gedmo/SortablePosition.php | 10 +++++----- src/Extensions/Gedmo/Translatable.php | 10 +++++----- src/Extensions/Gedmo/TranslationClass.php | 10 +++++----- src/Extensions/Gedmo/TreeLeft.php | 10 +++++----- src/Extensions/Gedmo/TreeLevel.php | 10 +++++----- src/Extensions/Gedmo/TreePath.php | 12 ++++++------ src/Extensions/Gedmo/TreePathHash.php | 10 +++++----- src/Extensions/Gedmo/TreePathSource.php | 10 +++++----- src/Extensions/Gedmo/TreeRight.php | 8 ++++---- src/Extensions/Gedmo/TreeSelfReference.php | 12 ++++++------ src/Extensions/Gedmo/TreeStrategy.php | 4 ++-- src/Extensions/Gedmo/Uploadable.php | 8 ++++---- src/Extensions/Gedmo/UploadableFile.php | 12 ++++++------ src/Extensions/Gedmo/Versioned.php | 10 +++++----- src/Relations/AbstractRelation.php | 4 ++-- 23 files changed, 116 insertions(+), 107 deletions(-) diff --git a/composer.json b/composer.json index d60b986..bb0a311 100644 --- a/composer.json +++ b/composer.json @@ -33,7 +33,7 @@ "require-dev": { "phpunit/phpunit": "~8.0|~9.0", "mockery/mockery": "~1.0", - "beberlei/doctrineextensions": "~1.0", + "beberlei/doctrineextensions": "~1.2", "zf1/zend-date": "~1.12", "nesbot/carbon": "*", "gedmo/doctrine-extensions": "^2.4|^3" diff --git a/src/Builders/Field.php b/src/Builders/Field.php index bf56cbd..4bb5c43 100644 --- a/src/Builders/Field.php +++ b/src/Builders/Field.php @@ -6,11 +6,11 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\Builder\FieldBuilder; -use Doctrine\ORM\Mapping\ClassMetadata; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Traits\Macroable; use LaravelDoctrine\Fluent\Builders\Traits\Queueable; use LaravelDoctrine\Fluent\Builders\Traits\QueuesMacros; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Extensions\Gedmo\GedmoFieldHints; /** @@ -56,7 +56,7 @@ class Field implements Buildable protected $metaDatabuilder; /** - * @var ClassMetadata + * @var ExtensibleClassMetadata */ protected $classMetadata; @@ -82,7 +82,11 @@ protected function __construct(FieldBuilder $fieldBuilder, ClassMetadataBuilder { $this->fieldBuilder = $fieldBuilder; $this->metaDatabuilder = $builder; - $this->classMetadata = $builder->getClassMetadata(); + + $extensibleClassMetadata = $builder->getClassMetadata(); + assert($extensibleClassMetadata instanceof ExtensibleClassMetadata); + $this->classMetadata = $extensibleClassMetadata; + $this->type = $type; $this->name = $name; } @@ -122,7 +126,7 @@ public function getType() } /** - * @return ClassMetadata + * @return ExtensibleClassMetadata */ public function getClassMetadata() { diff --git a/src/Extensions/Gedmo/AbstractTrackingExtension.php b/src/Extensions/Gedmo/AbstractTrackingExtension.php index 69bb4ca..1b98dff 100644 --- a/src/Extensions/Gedmo/AbstractTrackingExtension.php +++ b/src/Extensions/Gedmo/AbstractTrackingExtension.php @@ -2,13 +2,13 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Exception\InvalidMappingException; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; abstract class AbstractTrackingExtension { /** - * @var ClassMetadata + * @var ExtensibleClassMetadata */ protected $classMetadata; @@ -39,7 +39,11 @@ abstract class AbstractTrackingExtension */ abstract protected function getExtensionName(); - public function __construct(ClassMetadata $classMetadata, string $fieldName) + /** + * @param ExtensibleClassMetadata $classMetadata + * @param string $fieldName + */ + public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/Locale.php b/src/Extensions/Gedmo/Locale.php index e1bf981..7d27e17 100644 --- a/src/Extensions/Gedmo/Locale.php +++ b/src/Extensions/Gedmo/Locale.php @@ -2,12 +2,12 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Exception\InvalidMappingException; use Gedmo\Translatable\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Builder; use LaravelDoctrine\Fluent\Builders\Delay; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Extensions\Extension; class Locale implements Buildable, Extension, Delay @@ -15,7 +15,7 @@ class Locale implements Buildable, Extension, Delay const MACRO_METHOD = 'locale'; /** - * @var ClassMetadata + * @var ExtensibleClassMetadata */ private $classMetadata; @@ -27,10 +27,10 @@ class Locale implements Buildable, Extension, Delay /** * Locale constructor. * - * @param ClassMetadata $classMetadata - * @param string $fieldName + * @param ExtensibleClassMetadata $classMetadata + * @param string $fieldName */ - public function __construct(ClassMetadata $classMetadata, $fieldName) + public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/Loggable.php b/src/Extensions/Gedmo/Loggable.php index c509a60..8428d32 100644 --- a/src/Extensions/Gedmo/Loggable.php +++ b/src/Extensions/Gedmo/Loggable.php @@ -2,16 +2,16 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Loggable\Mapping\Driver\Fluent; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Builder; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Extensions\Extension; class Loggable implements Buildable, Extension { /** - * @var ClassMetadata + * @var ExtensibleClassMetadata */ private $classMetadata; @@ -21,10 +21,10 @@ class Loggable implements Buildable, Extension private $logEntry; /** - * @param ClassMetadata $classMetadata - * @param string|null $logEntry + * @param ExtensibleClassMetadata $classMetadata + * @param string|null $logEntry */ - public function __construct(ClassMetadata $classMetadata, $logEntry = null) + public function __construct(ExtensibleClassMetadata $classMetadata, $logEntry = null) { $this->classMetadata = $classMetadata; $this->logEntry = $logEntry; diff --git a/src/Extensions/Gedmo/Sluggable.php b/src/Extensions/Gedmo/Sluggable.php index cc27a1a..cbe05e8 100644 --- a/src/Extensions/Gedmo/Sluggable.php +++ b/src/Extensions/Gedmo/Sluggable.php @@ -2,11 +2,12 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ClassMetadataInfo; use Gedmo\Exception\InvalidArgumentException; use Gedmo\Sluggable\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Extensions\Extension; class Sluggable implements Buildable, Extension @@ -14,7 +15,7 @@ class Sluggable implements Buildable, Extension const MACRO_METHOD = 'sluggable'; /** - * @var ClassMetadata + * @var ExtensibleClassMetadata */ protected $classMetadata; @@ -88,11 +89,11 @@ class Sluggable implements Buildable, Extension ]; /** - * @param ClassMetadata $classMetadata - * @param string $fieldName - * @param array|string $fields + * @param ExtensibleClassMetadata $classMetadata + * @param string $fieldName + * @param array|string $fields */ - public function __construct(ClassMetadata $classMetadata, $fieldName, $fields) + public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName, $fields) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; @@ -256,14 +257,14 @@ public function suffix($suffix) /** * Checks if $field type is valid as Sluggable field. * - * @param ClassMetadata $meta - * @param string $field + * @param ClassMetadataInfo $meta + * @param string $field * * @throws InvalidArgumentException * * @return bool */ - protected function isValidField(ClassMetadata $meta, $field) + protected function isValidField(ClassMetadataInfo $meta, $field) { $mapping = $meta->getFieldMapping($field); diff --git a/src/Extensions/Gedmo/SoftDeleteable.php b/src/Extensions/Gedmo/SoftDeleteable.php index bef1caa..83711bf 100644 --- a/src/Extensions/Gedmo/SoftDeleteable.php +++ b/src/Extensions/Gedmo/SoftDeleteable.php @@ -2,11 +2,11 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\SoftDeleteable\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Builder; use LaravelDoctrine\Fluent\Builders\Field; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Extensions\Extension; class SoftDeleteable implements Buildable, Extension @@ -14,7 +14,7 @@ class SoftDeleteable implements Buildable, Extension const MACRO_METHOD = 'softDelete'; /** - * @var ClassMetadata + * @var ExtensibleClassMetadata */ protected $classMetadata; @@ -34,10 +34,10 @@ class SoftDeleteable implements Buildable, Extension protected $timeAware = false; /** - * @param ClassMetadata $classMetadata - * @param string $fieldName + * @param ExtensibleClassMetadata $classMetadata + * @param string $fieldName */ - public function __construct(ClassMetadata $classMetadata, $fieldName) + public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/SortableGroup.php b/src/Extensions/Gedmo/SortableGroup.php index 6d97991..e59a24d 100644 --- a/src/Extensions/Gedmo/SortableGroup.php +++ b/src/Extensions/Gedmo/SortableGroup.php @@ -2,10 +2,10 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Sortable\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Relations\ManyToMany; use LaravelDoctrine\Fluent\Relations\ManyToOne; @@ -14,7 +14,7 @@ class SortableGroup implements Buildable const MACRO_METHOD = 'sortableGroup'; /** - * @var ClassMetadata + * @var ExtensibleClassMetadata */ protected $classMetadata; @@ -24,10 +24,10 @@ class SortableGroup implements Buildable protected $fieldName; /** - * @param ClassMetadata $classMetadata - * @param string $fieldName + * @param ExtensibleClassMetadata $classMetadata + * @param string $fieldName */ - public function __construct(ClassMetadata $classMetadata, $fieldName) + public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/SortablePosition.php b/src/Extensions/Gedmo/SortablePosition.php index b0e5ebb..0364484 100644 --- a/src/Extensions/Gedmo/SortablePosition.php +++ b/src/Extensions/Gedmo/SortablePosition.php @@ -2,17 +2,17 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Sortable\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; class SortablePosition implements Buildable { const MACRO_METHOD = 'sortablePosition'; /** - * @var ClassMetadata + * @var ExtensibleClassMetadata */ protected $classMetadata; @@ -22,10 +22,10 @@ class SortablePosition implements Buildable protected $fieldName; /** - * @param ClassMetadata $classMetadata - * @param string $fieldName + * @param ExtensibleClassMetadata $classMetadata + * @param string $fieldName */ - public function __construct(ClassMetadata $classMetadata, $fieldName) + public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/Translatable.php b/src/Extensions/Gedmo/Translatable.php index d3b2717..dd2f02f 100644 --- a/src/Extensions/Gedmo/Translatable.php +++ b/src/Extensions/Gedmo/Translatable.php @@ -2,10 +2,10 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Translatable\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Extensions\Extension; class Translatable implements Buildable, Extension @@ -13,7 +13,7 @@ class Translatable implements Buildable, Extension const MACRO_METHOD = 'translatable'; /** - * @var ClassMetadata + * @var ExtensibleClassMetadata */ protected $classMetadata; @@ -23,10 +23,10 @@ class Translatable implements Buildable, Extension protected $fieldName; /** - * @param ClassMetadata $classMetadata - * @param string $fieldName + * @param ExtensibleClassMetadata $classMetadata + * @param string $fieldName */ - public function __construct(ClassMetadata $classMetadata, $fieldName) + public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/TranslationClass.php b/src/Extensions/Gedmo/TranslationClass.php index 661348a..d4b28c6 100644 --- a/src/Extensions/Gedmo/TranslationClass.php +++ b/src/Extensions/Gedmo/TranslationClass.php @@ -2,17 +2,17 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Translatable\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Builder; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; class TranslationClass implements Buildable { const MACRO_METHOD = 'translationClass'; /** - * @var ClassMetadata + * @var ExtensibleClassMetadata */ private $classMetadata; @@ -24,10 +24,10 @@ class TranslationClass implements Buildable /** * Locale constructor. * - * @param ClassMetadata $classMetadata - * @param string $class + * @param ExtensibleClassMetadata $classMetadata + * @param string $class */ - public function __construct(ClassMetadata $classMetadata, $class) + public function __construct(ExtensibleClassMetadata $classMetadata, $class) { $this->classMetadata = $classMetadata; $this->class = $class; diff --git a/src/Extensions/Gedmo/TreeLeft.php b/src/Extensions/Gedmo/TreeLeft.php index 2f8af8b..0f0f789 100644 --- a/src/Extensions/Gedmo/TreeLeft.php +++ b/src/Extensions/Gedmo/TreeLeft.php @@ -2,19 +2,19 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Exception\InvalidMappingException; use Gedmo\Tree\Mapping\Driver\Fluent as FluentDriver; use Gedmo\Tree\Mapping\Validator; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; class TreeLeft implements Buildable { const MACRO_METHOD = 'treeLeft'; /** - * @var ClassMetadata + * @var ExtensibleClassMetadata */ protected $classMetadata; @@ -24,10 +24,10 @@ class TreeLeft implements Buildable protected $fieldName; /** - * @param ClassMetadata $classMetadata - * @param string $fieldName + * @param ExtensibleClassMetadata $classMetadata + * @param string $fieldName */ - public function __construct(ClassMetadata $classMetadata, $fieldName) + public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/TreeLevel.php b/src/Extensions/Gedmo/TreeLevel.php index 48c182a..ee209f5 100644 --- a/src/Extensions/Gedmo/TreeLevel.php +++ b/src/Extensions/Gedmo/TreeLevel.php @@ -2,19 +2,19 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Exception\InvalidMappingException; use Gedmo\Tree\Mapping\Driver\Fluent as FluentDriver; use Gedmo\Tree\Mapping\Validator; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; class TreeLevel implements Buildable { const MACRO_METHOD = 'treeLevel'; /** - * @var ClassMetadata + * @var ExtensibleClassMetadata */ protected $classMetadata; @@ -24,10 +24,10 @@ class TreeLevel implements Buildable protected $fieldName; /** - * @param ClassMetadata $classMetadata - * @param string $fieldName + * @param ExtensibleClassMetadata $classMetadata + * @param string $fieldName */ - public function __construct(ClassMetadata $classMetadata, $fieldName) + public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/TreePath.php b/src/Extensions/Gedmo/TreePath.php index 8956420..2151759 100644 --- a/src/Extensions/Gedmo/TreePath.php +++ b/src/Extensions/Gedmo/TreePath.php @@ -2,11 +2,11 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Exception\InvalidMappingException; use Gedmo\Tree\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; class TreePath implements Buildable { @@ -15,7 +15,7 @@ class TreePath implements Buildable const DEFAULT_SEPARATOR = '|'; /** - * @var ClassMetadata + * @var ExtensibleClassMetadata */ protected $classMetadata; @@ -45,11 +45,11 @@ class TreePath implements Buildable protected $endsWithSeparator = true; /** - * @param ClassMetadata $classMetadata - * @param string $fieldName - * @param string $separator + * @param ExtensibleClassMetadata $classMetadata + * @param string $fieldName + * @param string $separator */ - public function __construct(ClassMetadata $classMetadata, $fieldName, $separator = self::DEFAULT_SEPARATOR) + public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName, $separator = self::DEFAULT_SEPARATOR) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/TreePathHash.php b/src/Extensions/Gedmo/TreePathHash.php index ed722fa..0db437a 100644 --- a/src/Extensions/Gedmo/TreePathHash.php +++ b/src/Extensions/Gedmo/TreePathHash.php @@ -2,17 +2,17 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Tree\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; class TreePathHash implements Buildable { const MACRO_METHOD = 'treePathHash'; /** - * @var ClassMetadata + * @var ExtensibleClassMetadata */ protected $classMetadata; @@ -22,10 +22,10 @@ class TreePathHash implements Buildable protected $fieldName; /** - * @param ClassMetadata $classMetadata - * @param string $fieldName + * @param ExtensibleClassMetadata $classMetadata + * @param string $fieldName */ - public function __construct(ClassMetadata $classMetadata, $fieldName) + public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/TreePathSource.php b/src/Extensions/Gedmo/TreePathSource.php index 5d97c27..b64fa70 100644 --- a/src/Extensions/Gedmo/TreePathSource.php +++ b/src/Extensions/Gedmo/TreePathSource.php @@ -2,19 +2,19 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Exception\InvalidMappingException; use Gedmo\Tree\Mapping\Driver\Fluent as FluentDriver; use Gedmo\Tree\Mapping\Validator; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; class TreePathSource implements Buildable { const MACRO_METHOD = 'treePathSource'; /** - * @var ClassMetadata + * @var ExtensibleClassMetadata */ protected $classMetadata; @@ -24,10 +24,10 @@ class TreePathSource implements Buildable protected $fieldName; /** - * @param ClassMetadata $classMetadata - * @param string $fieldName + * @param ExtensibleClassMetadata $classMetadata + * @param string $fieldName */ - public function __construct(ClassMetadata $classMetadata, $fieldName) + public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/TreeRight.php b/src/Extensions/Gedmo/TreeRight.php index 5704862..a137cf3 100644 --- a/src/Extensions/Gedmo/TreeRight.php +++ b/src/Extensions/Gedmo/TreeRight.php @@ -2,19 +2,19 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Exception\InvalidMappingException; use Gedmo\Tree\Mapping\Driver\Fluent as FluentDriver; use Gedmo\Tree\Mapping\Validator; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; class TreeRight implements Buildable { const MACRO_METHOD = 'treeRight'; /** - * @var ClassMetadata + * @var ExtensibleClassMetadata */ protected $classMetadata; @@ -24,10 +24,10 @@ class TreeRight implements Buildable protected $fieldName; /** - * @param ClassMetadata $classMetadata + * @param ExtensibleClassMetadata $classMetadata * @param string $fieldName */ - public function __construct(ClassMetadata $classMetadata, $fieldName) + public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/TreeSelfReference.php b/src/Extensions/Gedmo/TreeSelfReference.php index c7750c7..11f7569 100644 --- a/src/Extensions/Gedmo/TreeSelfReference.php +++ b/src/Extensions/Gedmo/TreeSelfReference.php @@ -2,16 +2,16 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Tree\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Relations\ManyToOne; class TreeSelfReference implements Buildable { /** - * @var ClassMetadata + * @var ExtensibleClassMetadata */ protected $classMetadata; @@ -26,11 +26,11 @@ class TreeSelfReference implements Buildable private $key; /** - * @param ClassMetadata $classMetadata - * @param string $fieldName - * @param string $key + * @param ExtensibleClassMetadata $classMetadata + * @param string $fieldName + * @param string $key */ - public function __construct(ClassMetadata $classMetadata, $fieldName, $key) + public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName, $key) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Extensions/Gedmo/TreeStrategy.php b/src/Extensions/Gedmo/TreeStrategy.php index 1bdc7d0..5787833 100644 --- a/src/Extensions/Gedmo/TreeStrategy.php +++ b/src/Extensions/Gedmo/TreeStrategy.php @@ -2,10 +2,10 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Exception\InvalidMappingException; use Gedmo\Tree\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Extensions\Extension; use LaravelDoctrine\Fluent\Fluent; @@ -142,7 +142,7 @@ protected function addSelfReferencingRelation($field, ?callable $callback = null } /** - * @return ClassMetadata + * @return ExtensibleClassMetadata */ protected function getClassMetadata() { diff --git a/src/Extensions/Gedmo/Uploadable.php b/src/Extensions/Gedmo/Uploadable.php index 101e1a0..d48ccf9 100644 --- a/src/Extensions/Gedmo/Uploadable.php +++ b/src/Extensions/Gedmo/Uploadable.php @@ -2,12 +2,12 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Uploadable\Mapping\Driver\Fluent as UploadableDriver; use Gedmo\Uploadable\Mapping\Validator; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Builder; use LaravelDoctrine\Fluent\Builders\Delay; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Extensions\Extension; class Uploadable implements Buildable, Delay, Extension @@ -60,14 +60,14 @@ class Uploadable implements Buildable, Delay, Extension private $disallowedTypes = ''; /** - * @var ClassMetadata + * @var ExtensibleClassMetadata */ private $classMetadata; /** - * @param ClassMetadata $classMetadata + * @param ExtensibleClassMetadata $classMetadata */ - public function __construct(ClassMetadata $classMetadata) + public function __construct(ExtensibleClassMetadata $classMetadata) { $this->classMetadata = $classMetadata; } diff --git a/src/Extensions/Gedmo/UploadableFile.php b/src/Extensions/Gedmo/UploadableFile.php index d31ec83..cf391ef 100644 --- a/src/Extensions/Gedmo/UploadableFile.php +++ b/src/Extensions/Gedmo/UploadableFile.php @@ -2,16 +2,16 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Exception\InvalidMappingException; use Gedmo\Uploadable\Mapping\Driver\Fluent as UploadableDriver; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; class UploadableFile implements Buildable { /** - * @var ClassMetadata + * @var ExtensibleClassMetadata */ private $classMetadata; @@ -33,11 +33,11 @@ class UploadableFile implements Buildable /** * UploadableFile constructor. * - * @param ClassMetadata $classMetadata - * @param string $fieldName - * @param string $type + * @param ExtensibleClassMetadata $classMetadata + * @param string $fieldName + * @param string $type */ - public function __construct(ClassMetadata $classMetadata, $fieldName, $type = 'Name') + public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName, $type = 'Name') { $this->validateType($type); diff --git a/src/Extensions/Gedmo/Versioned.php b/src/Extensions/Gedmo/Versioned.php index 32412bd..f435b76 100644 --- a/src/Extensions/Gedmo/Versioned.php +++ b/src/Extensions/Gedmo/Versioned.php @@ -2,10 +2,10 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Loggable\Mapping\Driver\Fluent; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Field; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; use LaravelDoctrine\Fluent\Relations\ManyToOne; use LaravelDoctrine\Fluent\Relations\OneToOne; @@ -14,7 +14,7 @@ class Versioned implements Buildable const MACRO_METHOD = 'versioned'; /** - * @var ClassMetadata + * @var ExtensibleClassMetadata */ private $classMetadata; @@ -26,10 +26,10 @@ class Versioned implements Buildable /** * Versioned constructor. * - * @param ClassMetadata $classMetadata - * @param string $fieldName + * @param ExtensibleClassMetadata $classMetadata + * @param string $fieldName */ - public function __construct(ClassMetadata $classMetadata, $fieldName) + public function __construct(ExtensibleClassMetadata $classMetadata, $fieldName) { $this->classMetadata = $classMetadata; $this->fieldName = $fieldName; diff --git a/src/Relations/AbstractRelation.php b/src/Relations/AbstractRelation.php index 6896390..6e23714 100644 --- a/src/Relations/AbstractRelation.php +++ b/src/Relations/AbstractRelation.php @@ -6,10 +6,10 @@ use Doctrine\Inflector\InflectorFactory; use Doctrine\ORM\Mapping\Builder\AssociationBuilder; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\NamingStrategy; use InvalidArgumentException; use LaravelDoctrine\Fluent\Builders\Traits\Queueable; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; /** * @method $this orphanRemoval() @@ -125,7 +125,7 @@ public function getBuilder() } /** - * @return ClassMetadata + * @return \Doctrine\ORM\Mapping\ClassMetadata|ExtensibleClassMetadata */ public function getClassMetadata() { From 01d2981a4f2a74d0f49a22c230bffb92d2b6d6c8 Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Fri, 8 Aug 2025 11:37:18 -0600 Subject: [PATCH 24/31] Testing ExtensibleClassMetadata stuff --- src/Builders/AbstractBuilder.php | 3 ++- src/Extensions/Gedmo/Sluggable.php | 8 ++++---- src/Extensions/Gedmo/TreeStrategy.php | 3 ++- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/Builders/AbstractBuilder.php b/src/Builders/AbstractBuilder.php index fe7f489..4708f5f 100644 --- a/src/Builders/AbstractBuilder.php +++ b/src/Builders/AbstractBuilder.php @@ -6,6 +6,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DefaultNamingStrategy; use Doctrine\ORM\Mapping\NamingStrategy; +use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata; abstract class AbstractBuilder { @@ -38,7 +39,7 @@ public function getBuilder() } /** - * @return ClassMetadata + * @return ClassMetadata|ExtensibleClassMetadata */ public function getClassMetadata() { diff --git a/src/Extensions/Gedmo/Sluggable.php b/src/Extensions/Gedmo/Sluggable.php index cbe05e8..8517e42 100644 --- a/src/Extensions/Gedmo/Sluggable.php +++ b/src/Extensions/Gedmo/Sluggable.php @@ -2,7 +2,7 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Exception\InvalidArgumentException; use Gedmo\Sluggable\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; @@ -257,14 +257,14 @@ public function suffix($suffix) /** * Checks if $field type is valid as Sluggable field. * - * @param ClassMetadataInfo $meta - * @param string $field + * @param ClassMetadata $meta + * @param string $field * * @throws InvalidArgumentException * * @return bool */ - protected function isValidField(ClassMetadataInfo $meta, $field) + protected function isValidField(ClassMetadata $meta, $field) { $mapping = $meta->getFieldMapping($field); diff --git a/src/Extensions/Gedmo/TreeStrategy.php b/src/Extensions/Gedmo/TreeStrategy.php index 5787833..62f2b40 100644 --- a/src/Extensions/Gedmo/TreeStrategy.php +++ b/src/Extensions/Gedmo/TreeStrategy.php @@ -2,6 +2,7 @@ namespace LaravelDoctrine\Fluent\Extensions\Gedmo; +use Doctrine\ORM\Mapping\ClassMetadata; use Gedmo\Exception\InvalidMappingException; use Gedmo\Tree\Mapping\Driver\Fluent as FluentDriver; use LaravelDoctrine\Fluent\Buildable; @@ -142,7 +143,7 @@ protected function addSelfReferencingRelation($field, ?callable $callback = null } /** - * @return ExtensibleClassMetadata + * @return ExtensibleClassMetadata|ClassMetadata */ protected function getClassMetadata() { From 9c3212f643e8fd4100a4d47144526a7d8bc72748 Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Fri, 8 Aug 2025 12:25:38 -0600 Subject: [PATCH 25/31] Testing ExtensibleClassMetadata stuff --- src/Builders/Field.php | 4 +--- tests/Relations/RelationTestCase.php | 1 + 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Builders/Field.php b/src/Builders/Field.php index 4bb5c43..ab8d16b 100644 --- a/src/Builders/Field.php +++ b/src/Builders/Field.php @@ -83,9 +83,7 @@ protected function __construct(FieldBuilder $fieldBuilder, ClassMetadataBuilder $this->fieldBuilder = $fieldBuilder; $this->metaDatabuilder = $builder; - $extensibleClassMetadata = $builder->getClassMetadata(); - assert($extensibleClassMetadata instanceof ExtensibleClassMetadata); - $this->classMetadata = $extensibleClassMetadata; + $this->classMetadata = $builder->getClassMetadata(); $this->type = $type; $this->name = $name; diff --git a/tests/Relations/RelationTestCase.php b/tests/Relations/RelationTestCase.php index e379069..bf45204 100644 --- a/tests/Relations/RelationTestCase.php +++ b/tests/Relations/RelationTestCase.php @@ -5,6 +5,7 @@ use BadMethodCallException; use Doctrine\ORM\Mapping\ClassMetadata; use InvalidArgumentException; +use LaravelDoctrine\Fluent\Relations\Relation; use PHPUnit\Framework\TestCase; class RelationTestCase extends TestCase From 1b6501879e369b882272cbfec1a0e179c83090bf Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Fri, 8 Aug 2025 12:44:56 -0600 Subject: [PATCH 26/31] Revert functions back and convert parameters to array when calling them --- .../Overrides/AssociationOverride.php | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Builders/Overrides/AssociationOverride.php b/src/Builders/Overrides/AssociationOverride.php index 0ed20e6..9c489d1 100644 --- a/src/Builders/Overrides/AssociationOverride.php +++ b/src/Builders/Overrides/AssociationOverride.php @@ -86,7 +86,7 @@ public function build() // Give the original join table name, so we won't // accidentally remove custom join table names - if ($this->hasJoinTable($source)) { + if ($this->hasJoinTable((array) $source)) { $associationBuilder->setJoinTable($source->joinTable->name); } @@ -109,7 +109,7 @@ public function build() $overrideMapping = []; // ManyToMany mappings - if ($this->hasJoinTable($target)) { + if ($this->hasJoinTable((array) $target)) { $overrideMapping['joinTable'] = $this->mapJoinTable( $target->joinTable, $source->joinTable @@ -117,7 +117,7 @@ public function build() } // ManyToOne mappings - if ($this->hasJoinColumns($target)) { + if ($this->hasJoinColumns((array) $target)) { $overrideMapping['joinColumns'] = $this->mapJoinColumns( $target->joinColumns, $source->joinColumns @@ -174,14 +174,14 @@ protected function mapJoinTable(JoinTableMapping $target, JoinTableMapping $sour { $joinTable['name'] = $target->name; - if ($this->hasJoinColumns($target)) { + if ($this->hasJoinColumns((array) $target)) { $joinTable['joinColumns'] = $this->mapJoinColumns( $target->joinColumns, $source->joinColumns ); } - if ($this->hasInverseJoinColumns($target)) { + if ($this->hasInverseJoinColumns((array) $target)) { $joinTable['inverseJoinColumns'] = $this->mapJoinColumns( $target->inverseJoinColumns, $source->inverseJoinColumns @@ -218,32 +218,32 @@ protected function mapJoinColumns(array $target = [], array $source = []) } /** - * @param ArrayAccess $target + * @param array $target * * @return bool */ - protected function hasJoinColumns(ArrayAccess $target) + protected function hasJoinColumns(array $target = []) { - return isset($target->joinColumns); + return isset($target['joinColumns']); } /** - * @param ArrayAccess $target + * @param array $target * * @return bool */ - protected function hasInverseJoinColumns(ArrayAccess $target) + protected function hasInverseJoinColumns(array $target = []) { - return isset($target->inverseJoinColumns); + return isset($target['inverseJoinColumns']); } /** - * @param ArrayAccess $target + * @param array $target * * @return bool */ - protected function hasJoinTable(ArrayAccess $target) + protected function hasJoinTable(array $target = []) { - return isset($target->joinTable); + return isset($target['joinTable']); } } From e6a9fa128a1974b545197aac0287587fb8d5d6fa Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Fri, 8 Aug 2025 12:58:55 -0600 Subject: [PATCH 27/31] Tweak --- src/Builders/Field.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Builders/Field.php b/src/Builders/Field.php index ab8d16b..19283d5 100644 --- a/src/Builders/Field.php +++ b/src/Builders/Field.php @@ -6,6 +6,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\Builder\FieldBuilder; +use Doctrine\ORM\Mapping\ClassMetadata; use LaravelDoctrine\Fluent\Buildable; use LaravelDoctrine\Fluent\Builders\Traits\Macroable; use LaravelDoctrine\Fluent\Builders\Traits\Queueable; @@ -56,7 +57,7 @@ class Field implements Buildable protected $metaDatabuilder; /** - * @var ExtensibleClassMetadata + * @var ClassMetadata|ExtensibleClassMetadata */ protected $classMetadata; @@ -82,9 +83,7 @@ protected function __construct(FieldBuilder $fieldBuilder, ClassMetadataBuilder { $this->fieldBuilder = $fieldBuilder; $this->metaDatabuilder = $builder; - $this->classMetadata = $builder->getClassMetadata(); - $this->type = $type; $this->name = $name; } @@ -124,7 +123,7 @@ public function getType() } /** - * @return ExtensibleClassMetadata + * @return ClassMetadata|ExtensibleClassMetadata */ public function getClassMetadata() { From 1afa2a81d8f0c3df2712080dba536bd9730595de Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Fri, 8 Aug 2025 17:46:43 -0600 Subject: [PATCH 28/31] Less diff --- .../Overrides/AssociationOverride.php | 63 ++++++++++--------- src/Builders/Overrides/AttributeOverride.php | 13 ++-- 2 files changed, 40 insertions(+), 36 deletions(-) diff --git a/src/Builders/Overrides/AssociationOverride.php b/src/Builders/Overrides/AssociationOverride.php index 9c489d1..a845879 100644 --- a/src/Builders/Overrides/AssociationOverride.php +++ b/src/Builders/Overrides/AssociationOverride.php @@ -2,12 +2,8 @@ namespace LaravelDoctrine\Fluent\Builders\Overrides; -use ArrayAccess; -use Doctrine\ORM\Mapping\AssociationMapping; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\JoinColumnMapping; -use Doctrine\ORM\Mapping\JoinTableMapping; use Doctrine\ORM\Mapping\NamingStrategy; use InvalidArgumentException; use LaravelDoctrine\Fluent\Buildable; @@ -77,7 +73,7 @@ public function build() $builder = $this->newClassMetadataBuilder(); $source = $this->convertToMappingArray($this->builder); - if (!isset($this->relations[$source->type()])) { + if (!isset($this->relations[$source['type']])) { throw new InvalidArgumentException('Only ManyToMany and ManyToOne relations can be overridden'); } @@ -86,8 +82,8 @@ public function build() // Give the original join table name, so we won't // accidentally remove custom join table names - if ($this->hasJoinTable((array) $source)) { - $associationBuilder->setJoinTable($source->joinTable->name); + if ($this->hasJoinTable($source)) { + $associationBuilder->setJoinTable($source['joinTable']['name']); } $association = $callback($associationBuilder); @@ -101,7 +97,7 @@ public function build() } $association instanceof AssociationCache ? - $association->build($source->targetEntity) : + $association->build($source['targetEntity']) : $association->build(); $target = $this->convertToMappingArray($builder); @@ -109,18 +105,18 @@ public function build() $overrideMapping = []; // ManyToMany mappings - if ($this->hasJoinTable((array) $target)) { + if ($this->hasJoinTable($target)) { $overrideMapping['joinTable'] = $this->mapJoinTable( - $target->joinTable, - $source->joinTable + (array) $target['joinTable'], + (array) $source['joinTable'] ); } // ManyToOne mappings - if ($this->hasJoinColumns((array) $target)) { + if ($this->hasJoinColumns($target)) { $overrideMapping['joinColumns'] = $this->mapJoinColumns( - $target->joinColumns, - $source->joinColumns + $target['joinColumns'], + $source['joinColumns'] ); } @@ -135,13 +131,16 @@ public function build() * * @throws \Doctrine\ORM\Mapping\MappingException * - * @return AssociationMapping + * @return array */ protected function convertToMappingArray(ClassMetadataBuilder $builder) { $metadata = $builder->getClassMetadata(); - return $metadata->getAssociationMapping($this->name); + $associationMappingArray = (array) $metadata->getAssociationMapping($this->name); + $associationMappingArray['type'] = $metadata->getAssociationMapping($this->name)->type(); + + return $associationMappingArray; } /** @@ -155,36 +154,42 @@ protected function newClassMetadataBuilder() } /** + * @param $builder + * @param $source + * * @return mixed */ - protected function getAssociationBuilder(ClassMetadataBuilder $builder, AssociationMapping $source) + protected function getAssociationBuilder(ClassMetadataBuilder $builder, array $source) { - return new $this->relations[$source->type()]( + return new $this->relations[$source['type']]( $builder, $this->namingStrategy, $this->name, - $source->targetEntity + $source['targetEntity'] ); } /** + * @param array $target + * @param array $source + * * @return array */ - protected function mapJoinTable(JoinTableMapping $target, JoinTableMapping $source) + protected function mapJoinTable(array $target = [], array $source = []) { - $joinTable['name'] = $target->name; + $joinTable['name'] = $target['name']; - if ($this->hasJoinColumns((array) $target)) { + if ($this->hasJoinColumns($target)) { $joinTable['joinColumns'] = $this->mapJoinColumns( - $target->joinColumns, - $source->joinColumns + $target['joinColumns'], + $source['joinColumns'] ); } - if ($this->hasInverseJoinColumns((array) $target)) { + if ($this->hasInverseJoinColumns($target)) { $joinTable['inverseJoinColumns'] = $this->mapJoinColumns( - $target->inverseJoinColumns, - $source->inverseJoinColumns + $target['inverseJoinColumns'], + $source['inverseJoinColumns'] ); } @@ -192,8 +197,8 @@ protected function mapJoinTable(JoinTableMapping $target, JoinTableMapping $sour } /** - * @param array $target - * @param array $source + * @param array $target + * @param array $source * * @return mixed * diff --git a/src/Builders/Overrides/AttributeOverride.php b/src/Builders/Overrides/AttributeOverride.php index 1052849..b5720e8 100644 --- a/src/Builders/Overrides/AttributeOverride.php +++ b/src/Builders/Overrides/AttributeOverride.php @@ -4,7 +4,6 @@ use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\FieldMapping; use Doctrine\ORM\Mapping\NamingStrategy; use InvalidArgumentException; use LaravelDoctrine\Fluent\Buildable; @@ -87,21 +86,21 @@ public function build() $this->builder->getClassMetadata()->setAttributeOverride( $this->name, - $this->mergeRecursively((array) $source, (array) $target) + $this->mergeRecursively($source, $target) ); } /** * @param ClassMetadataBuilder $builder - * @param FieldMapping $mapping + * @param array $mapping * * @return Field */ - protected function getFieldBuilder(ClassMetadataBuilder $builder, FieldMapping $mapping) + protected function getFieldBuilder(ClassMetadataBuilder $builder, array $mapping) { return Field::make( $builder, - $mapping->type, + $mapping['type'], $this->name ); } @@ -111,13 +110,13 @@ protected function getFieldBuilder(ClassMetadataBuilder $builder, FieldMapping $ * * @throws \Doctrine\ORM\Mapping\MappingException * - * @return FieldMapping + * @return array */ protected function convertToMappingArray(ClassMetadataBuilder $builder) { $metadata = $builder->getClassMetadata(); - return $metadata->getFieldMapping($this->name); + return (array) $metadata->getFieldMapping($this->name); } /** From dcc24f29e2017cc69c4689a237f9ea3307ebf53d Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Mon, 11 Aug 2025 16:50:33 -0600 Subject: [PATCH 29/31] Revert --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index bb0a311..d60b986 100644 --- a/composer.json +++ b/composer.json @@ -33,7 +33,7 @@ "require-dev": { "phpunit/phpunit": "~8.0|~9.0", "mockery/mockery": "~1.0", - "beberlei/doctrineextensions": "~1.2", + "beberlei/doctrineextensions": "~1.0", "zf1/zend-date": "~1.12", "nesbot/carbon": "*", "gedmo/doctrine-extensions": "^2.4|^3" From a4e78acaacdc4452ec8d37991af29a4fa35b52b2 Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Tue, 12 Aug 2025 09:40:25 -0600 Subject: [PATCH 30/31] Revert version --- composer.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/composer.json b/composer.json index d60b986..575cd88 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,5 @@ { - "name": "activated-insights/laravel-doctrine-fluent", - "version": "dev-orm-3.1-update", + "name": "laravel-doctrine/fluent", "description": "A fluent PHP mapping driver for Doctrine2.", "license": "MIT", "keywords": [ From d9e697de5f09e3d68240ad82cab2a3c0c3a0d4ea Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Thu, 28 Aug 2025 13:32:01 -0600 Subject: [PATCH 31/31] Get branch ready for upstream PRs --- .docker/conf/xdebug.ini | 8 -------- Dockerfile | 28 ---------------------------- README.md | 2 +- docker-compose.yaml | 15 --------------- 4 files changed, 1 insertion(+), 52 deletions(-) delete mode 100644 .docker/conf/xdebug.ini delete mode 100644 Dockerfile delete mode 100644 docker-compose.yaml diff --git a/.docker/conf/xdebug.ini b/.docker/conf/xdebug.ini deleted file mode 100644 index ff5e70d..0000000 --- a/.docker/conf/xdebug.ini +++ /dev/null @@ -1,8 +0,0 @@ -[xdebug] -xdebug.mode=develop,debug -xdebug.idekey=docker -xdebug.start_with_request=yes -xdebug.log=/dev/stdout -xdebug.log_level=0 -xdebug.client_port=9003 -xdebug.client_host=host.docker.internal diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 3179c40..0000000 --- a/Dockerfile +++ /dev/null @@ -1,28 +0,0 @@ -# Use official PHP 8.1 CLI image as base -FROM php:8.1-apache - -# Install system dependencies -RUN apt-get update && apt-get install -y \ - git \ - libzip-dev \ - && docker-php-ext-install zip \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -# Install Composer -RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer - -# Install Xdebug -RUN pecl install xdebug && docker-php-ext-enable xdebug - -# Set working directory -WORKDIR /var/www/html/laravel-doctrine-fluent - -# Install Laravel dependencies -RUN composer install --no-interaction --optimize-autoloader --dev || true - -# Expose port for Laravel development server -EXPOSE 8000 - -# Start Laravel development server -CMD ["apache2-foreground"] diff --git a/README.md b/README.md index 6c9e6d9..dafb6d9 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![License](https://img.shields.io/packagist/l/laravel-doctrine/fluent.svg?style=flat-square)](https://packagist.org/packages/laravel-doctrine/fluent) [![Github actions](https://github.com/laravel-doctrine/fluent/workflows/CI/badge.svg?branch=1.x)](https://github.com/laravel-doctrine/fluent/actions?query=workflow%3ACI+branch%3A1.x) -*A fluent mapping driver for Doctrine2* +*A fluent mapping driver for Doctrine3* ``` composer require laravel-doctrine/fluent diff --git a/docker-compose.yaml b/docker-compose.yaml deleted file mode 100644 index 536b81a..0000000 --- a/docker-compose.yaml +++ /dev/null @@ -1,15 +0,0 @@ -services: - php: - build: - context: . - dockerfile: Dockerfile - container_name: laravel-doctrine-fluent - volumes: - - ./:/var/www/html/laravel-doctrine-fluent - - ./.docker/conf/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini - ports: - - "8000:80" - environment: - - XDEBUG_MODE=debug - - XDEBUG_CONFIG=client_host=host.docker.internal client_port=9003 - - PHP_IDE_CONFIG=serverName=laravel-doctrine-fluent