Skip to content

Commit

Permalink
Migrate basic entity persister to the object API of association mapping
Browse files Browse the repository at this point in the history
  • Loading branch information
greg0ire committed Apr 21, 2023
1 parent c019f86 commit ade5559
Show file tree
Hide file tree
Showing 7 changed files with 149 additions and 113 deletions.
6 changes: 6 additions & 0 deletions lib/Doctrine/ORM/Mapping/AssociationMapping.php
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,12 @@ final public function isToMany(): bool
return $this instanceof ToManyAssociationMapping;
}

/** @psalm-assert-if-true OneToOneOwningSideMapping $this */
final public function isOneToOneOwningSide(): bool
{
return $this->isOneToOne() && $this->isOwningSide();
}

/** @psalm-assert-if-true OneToOneOwningSideMapping|ManyToOneAssociationMapping $this */
final public function isToOneOwningSide(): bool
{
Expand Down
2 changes: 1 addition & 1 deletion lib/Doctrine/ORM/Mapping/ClassMetadata.php
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,7 @@ class ClassMetadata implements PersistenceClassMetadata, Stringable
* )
* </pre>
*
* @psalm-var array<string, OneToOneAssociationMapping|ManyToOneAssociationMapping|OneToManyAssociationMapping|ManyToManyAssociationMapping>
* @psalm-var array<string, AssociationMapping>
*/
public array $associationMappings = [];

Expand Down
226 changes: 130 additions & 96 deletions lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions lib/Doctrine/ORM/Tools/SchemaValidator.php
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ public function validateClass(ClassMetadata $class): array
}

if ($assoc->isOwningSide()) {
if ($assoc->isManyToMany()) {
if ($assoc->isManyToManyOwningSide()) {
$identifierColumns = $class->getIdentifierColumnNames();
foreach ($assoc['joinTable']['joinColumns'] as $joinColumn) {
if (! in_array($joinColumn['referencedColumnName'], $identifierColumns, true)) {
Expand Down Expand Up @@ -194,7 +194,7 @@ public function validateClass(ClassMetadata $class): array
"however '" . implode(', ', array_diff($class->getIdentifierColumnNames(), array_values($assoc['relationToSourceKeyColumns']))) .
"' are missing.";
}
} elseif ($assoc->isToOne()) {
} elseif ($assoc->isToOneOwningSide()) {
$identifierColumns = $targetMetadata->getIdentifierColumnNames();
foreach ($assoc['joinColumns'] as $joinColumn) {
if (! in_array($joinColumn['referencedColumnName'], $identifierColumns, true)) {
Expand Down
2 changes: 1 addition & 1 deletion lib/Doctrine/ORM/Utility/PersisterHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public static function getTypeOfField(string $fieldName, ClassMetadata $class, E
return self::getTypeOfField($assoc['mappedBy'], $em->getClassMetadata($assoc['targetEntity']), $em);
}

if ($assoc->isManyToMany()) {
if ($assoc->isManyToManyOwningSide()) {
$joinData = $assoc['joinTable'];
} else {
$joinData = $assoc;
Expand Down
18 changes: 8 additions & 10 deletions phpstan.neon
Original file line number Diff line number Diff line change
Expand Up @@ -30,17 +30,15 @@ parameters:
path: lib/Doctrine/ORM/Mapping/ToOneAssociationMapping.php

-
message: "#^Access to an undefined property .*Mapping\\:\\:\\$(joinTableColumns|relationTo(Target|Source)KeyColumns|joinTable|indexBy)\\.$#"
path: lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php
message: "#^Access to an undefined property .*Mapping\\:\\:\\$(joinColumns|joinTableColumns|(relation|source|target)To(Target|Source)KeyColumns|joinTable|indexBy)\\.$#"
paths:
- lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php
- lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php
- lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php
- lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php
- lib/Doctrine/ORM/Query/SqlWalker.php
- lib/Doctrine/ORM/UnitOfWork.php

-
message: "#^Method Doctrine\\\\ORM\\\\Mapping\\\\ToOneAssociationMapping\\:\\:fromMappingArrayAndName\\(\\) should return Doctrine\\\\ORM\\\\Mapping\\\\ManyToOneAssociationMapping\\|Doctrine\\\\ORM\\\\Mapping\\\\OneToOneAssociationMapping but returns static\\(Doctrine\\\\ORM\\\\Mapping\\\\ToOneAssociationMapping\\)\\.$#"
path: lib/Doctrine/ORM/Mapping/ToOneAssociationMapping.php

-
message: "#^Property Doctrine\\\\ORM\\\\Mapping\\\\ClassMetadata\\<T of object\\>\\:\\:\\$associationMappings \\(array\\<string, Doctrine\\\\ORM\\\\Mapping\\\\ManyToManyAssociationMapping\\|Doctrine\\\\ORM\\\\Mapping\\\\ManyToOneAssociationMapping\\|Doctrine\\\\ORM\\\\Mapping\\\\OneToManyAssociationMapping\\|Doctrine\\\\ORM\\\\Mapping\\\\OneToOneAssociationMapping\\>\\) does not accept array\\<int\\|string, Doctrine\\\\ORM\\\\Mapping\\\\AssociationMapping\\>\\.$#"
path: lib/Doctrine/ORM/Mapping/ClassMetadata.php

-
message: "#^Property Doctrine\\\\ORM\\\\Mapping\\\\ClassMetadata\\<T of object\\>\\:\\:\\$associationMappings \\(array\\<string, Doctrine\\\\ORM\\\\Mapping\\\\ManyToManyAssociationMapping\\|Doctrine\\\\ORM\\\\Mapping\\\\ManyToOneAssociationMapping\\|Doctrine\\\\ORM\\\\Mapping\\\\OneToManyAssociationMapping\\|Doctrine\\\\ORM\\\\Mapping\\\\OneToOneAssociationMapping\\>\\) does not accept array\\<string, Doctrine\\\\ORM\\\\Mapping\\\\AssociationMapping\\>\\.$#"
path: lib/Doctrine/ORM/Mapping/ClassMetadata.php
4 changes: 1 addition & 3 deletions psalm-baseline.xml
Original file line number Diff line number Diff line change
Expand Up @@ -737,9 +737,7 @@
<code>array</code>
<code><![CDATA[list<mixed>]]></code>
</MoreSpecificReturnType>
<PossiblyNullArgument>
<code>$association</code>
</PossiblyNullArgument>
<PossiblyNullArgument/>
<PossiblyNullReference>
<code>getValue</code>
<code>getValue</code>
Expand Down

0 comments on commit ade5559

Please sign in to comment.