Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
00a9f16
Update composer.json
DudeMason Aug 6, 2025
eebb0b9
ClassMetadata update
DudeMason Aug 6, 2025
e948425
More ClassMetadata update
DudeMason Aug 6, 2025
e03842a
AssociationOverride array access updates
DudeMason Aug 6, 2025
46fa736
AttributeOverride array access updates
DudeMason Aug 6, 2025
d696be4
Misc updates
DudeMason Aug 6, 2025
69bca43
Docker setup
DudeMason Aug 7, 2025
b68343e
Fix tests due to php 8.1 update inability to access un-initialized pr…
DudeMason Aug 7, 2025
1718ee8
Fix bug
DudeMason Aug 7, 2025
98ead34
Return types
DudeMason Aug 7, 2025
1aa4a4f
Fix association cache problem
DudeMason Aug 7, 2025
d440f96
Types and formatting
DudeMason Aug 7, 2025
cd03b8c
Minimum viable changes
DudeMason Aug 7, 2025
89d61d9
Extra type
DudeMason Aug 7, 2025
425fad3
Misc
DudeMason Aug 7, 2025
f1d2e7a
Type undo
DudeMason Aug 7, 2025
4b35660
CI suggestions
DudeMason Aug 7, 2025
6a4c9cf
Review updates
DudeMason Aug 7, 2025
0de1c65
Review updates
DudeMason Aug 7, 2025
5cbfd59
Don't need the unzip
DudeMason Aug 7, 2025
dcc3381
Update composer.json for pulling in as dev dependency
DudeMason Aug 8, 2025
2f85a5e
Testing ExtensibleClassMetadata stuff
DudeMason Aug 8, 2025
2becff4
Testing ExtensibleClassMetadata stuff
DudeMason Aug 8, 2025
01d2981
Testing ExtensibleClassMetadata stuff
DudeMason Aug 8, 2025
9c3212f
Testing ExtensibleClassMetadata stuff
DudeMason Aug 8, 2025
1b65018
Revert functions back and convert parameters to array when calling them
DudeMason Aug 8, 2025
e6a9fa1
Tweak
DudeMason Aug 8, 2025
1afa2a8
Less diff
DudeMason Aug 8, 2025
dcc24f2
Revert
DudeMason Aug 11, 2025
a4e78ac
Revert version
DudeMason Aug 12, 2025
d9e697d
Get branch ready for upstream PRs
DudeMason Aug 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@
}
],
"require": {
"php": "^7.2|^8.0",
"php": "^8.1",
"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"
},
Expand Down
3 changes: 2 additions & 1 deletion src/Builders/AbstractBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand Down Expand Up @@ -38,7 +39,7 @@ public function getBuilder()
}

/**
* @return ClassMetadata
* @return ClassMetadata|ExtensibleClassMetadata
*/
public function getClassMetadata()
{
Expand Down
6 changes: 3 additions & 3 deletions src/Builders/Entity.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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.
Expand All @@ -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'));
Expand Down
7 changes: 3 additions & 4 deletions src/Builders/Field.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +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\Persistence\Mapping\ClassMetadata;
use Doctrine\ORM\Mapping\ClassMetadata;
use LaravelDoctrine\Fluent\Buildable;
use LaravelDoctrine\Fluent\Builders\Traits\Macroable;
use LaravelDoctrine\Fluent\Builders\Traits\Queueable;
Expand Down Expand Up @@ -58,7 +57,7 @@ class Field implements Buildable
protected $metaDatabuilder;

/**
* @var ClassMetadataInfo
* @var ClassMetadata|ExtensibleClassMetadata
*/
protected $classMetadata;

Expand Down Expand Up @@ -94,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
*/
Expand Down
10 changes: 5 additions & 5 deletions src/Builders/GeneratedValue.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -39,15 +39,15 @@ class GeneratedValue implements Buildable
protected $generator;

/**
* @var ClassMetadataInfo
* @var ClassMetadata
*/
protected $classMetadata;

/**
* @param FieldBuilder $builder
* @param ClassMetadataInfo $classMetadata
* @param FieldBuilder $builder
* @param ClassMetadata $classMetadata
*/
public function __construct(FieldBuilder $builder, ClassMetadataInfo $classMetadata)
public function __construct(FieldBuilder $builder, ClassMetadata $classMetadata)
{
$this->builder = $builder;
$this->classMetadata = $classMetadata;
Expand Down
6 changes: 3 additions & 3 deletions src/Builders/Inheritance/Inheritance.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace LaravelDoctrine\Fluent\Builders\Inheritance;

use Doctrine\ORM\Mapping\ClassMetadataInfo;
use Doctrine\ORM\Mapping\ClassMetadata;

interface Inheritance
{
Expand All @@ -12,15 +12,15 @@ 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.
*
* @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.
Expand Down
24 changes: 15 additions & 9 deletions src/Builders/Overrides/AssociationOverride.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@
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;
use LaravelDoctrine\Fluent\Relations\AssociationCache;
use LaravelDoctrine\Fluent\Relations\ManyToMany;
use LaravelDoctrine\Fluent\Relations\ManyToOne;
use LaravelDoctrine\Fluent\Relations\Relation;
Expand Down Expand Up @@ -37,8 +38,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,
];

/**
Expand Down Expand Up @@ -95,7 +96,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);

Expand All @@ -104,8 +107,8 @@ public function build()
// ManyToMany mappings
if ($this->hasJoinTable($target)) {
$overrideMapping['joinTable'] = $this->mapJoinTable(
$target['joinTable'],
$source['joinTable']
(array) $target['joinTable'],
(array) $source['joinTable']
);
}

Expand Down Expand Up @@ -134,7 +137,10 @@ 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;
}

/**
Expand All @@ -143,7 +149,7 @@ protected function convertToMappingArray(ClassMetadataBuilder $builder)
protected function newClassMetadataBuilder()
{
return new ClassMetadataBuilder(
new ClassMetadataInfo($this->builder->getClassMetadata()->name)
new ClassMetadata($this->builder->getClassMetadata()->name)
);
}

Expand Down Expand Up @@ -205,7 +211,7 @@ protected function mapJoinColumns(array $target = [], array $source = [])
$joinColumns = [];
foreach ($target as $index => $joinColumn) {
if (isset($source[$index])) {
$diff = array_diff($joinColumn, $source[$index]);
$diff = array_diff((array) $joinColumn, (array) $source[$index]);

if (!empty($diff)) {
$joinColumns[] = $diff;
Expand Down
6 changes: 3 additions & 3 deletions src/Builders/Overrides/AttributeOverride.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -116,7 +116,7 @@ protected function convertToMappingArray(ClassMetadataBuilder $builder)
{
$metadata = $builder->getClassMetadata();

return $metadata->getFieldMapping($this->name);
return (array) $metadata->getFieldMapping($this->name);
}

/**
Expand All @@ -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)
);
}

Expand Down
2 changes: 1 addition & 1 deletion src/Builders/Table.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
5 changes: 4 additions & 1 deletion src/Builders/Traits/Queueable.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use LaravelDoctrine\Fluent\Buildable;
use LaravelDoctrine\Fluent\Builders\Delay;
use LaravelDoctrine\Fluent\Relations\AssociationCache;

trait Queueable
{
Expand Down Expand Up @@ -43,7 +44,9 @@ public function build()
if ($buildable instanceof Delay) {
$delayed[] = $buildable;
} else {
$buildable->build();
$buildable instanceof AssociationCache ?
$buildable->build($this->entity) :
$buildable->build();
}
}

Expand Down
13 changes: 3 additions & 10 deletions src/Extensions/ExtensibleClassMetadataFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,12 @@

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);

Expand All @@ -26,10 +21,8 @@ public function setEntityManager(EntityManagerInterface $em)

/**
* Override to implement our custom ClassMetadata object.
*
* {@inheritdoc}
*/
protected function newClassMetadataInstance($className)
protected function newClassMetadataInstance(string $className): ExtensibleClassMetadata
{
return new ExtensibleClassMetadata($className, $this->entityManager->getConfiguration()->getNamingStrategy());
}
Expand Down
8 changes: 4 additions & 4 deletions src/Extensions/Gedmo/Sluggable.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);

Expand Down
3 changes: 2 additions & 1 deletion src/Extensions/Gedmo/TreeStrategy.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -142,7 +143,7 @@ protected function addSelfReferencingRelation($field, ?callable $callback = null
}

/**
* @return ExtensibleClassMetadata
* @return ExtensibleClassMetadata|ClassMetadata
*/
protected function getClassMetadata()
{
Expand Down
3 changes: 2 additions & 1 deletion src/FluentDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
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\Persistence\Mapping\ClassMetadata;
Expand Down Expand Up @@ -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);
};

Expand Down
Loading