Skip to content

Commit 1c528c1

Browse files
authored
Merge pull request #1592 from scyzoryck/fix-doctrine-types
Fix array access in Doctrine Driver for new Doctrine ORM 3.1+
2 parents 033c9be + ce41921 commit 1c528c1

File tree

5 files changed

+24
-5
lines changed

5 files changed

+24
-5
lines changed

phpstan/doctrine30.neon

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
parameters:
2+
ignoreErrors:
3+
- '~Class Doctrine\\ORM\\Mapping\\DiscriminatorColumnMapping not found~'

phpstan/doctrine31.neon

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
parameters:
2+
ignoreErrors:
3+
- ~Offset 'name' does not exist on null~

phpstan/ignore-by-php-version.neon.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
}
1313
if (PHP_VERSION_ID < 80100) {
1414
$includes[] = __DIR__ . '/no-enum.neon';
15+
$includes[] = __DIR__ . '/doctrine30.neon';
16+
} else {
17+
$includes[] = __DIR__ . '/doctrine31.neon';
1518
}
1619
if (PHP_VERSION_ID >= 80000) {
1720
$includes[] = __DIR__ . '/ignore-missing-attribute.neon';

phpunit.xml.dist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.0/phpunit.xsd" colors="true" beStrictAboutOutputDuringTests="true" failOnRisky="true" failOnWarning="false" bootstrap="tests/bootstrap.php" cacheDirectory=".phpunit.cache">
2+
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.0/phpunit.xsd" colors="true" beStrictAboutOutputDuringTests="true" failOnRisky="false" failOnWarning="false" bootstrap="tests/bootstrap.php" cacheDirectory=".phpunit.cache">
33
<php>
44
<ini name="error_reporting" value="-1"/>
55
<ini name="serialize_precision" value="14"/>

src/Metadata/Driver/DoctrineTypeDriver.php

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Doctrine\ODM\PHPCR\Mapping\ClassMetadata as ORMClassMetadata;
88
use Doctrine\ORM\Mapping\ClassMetadata as ODMClassMetadata;
9+
use Doctrine\ORM\Mapping\DiscriminatorColumnMapping;
910
use Doctrine\Persistence\Mapping\ClassMetadata as DoctrineClassMetadata;
1011
use JMS\Serializer\Metadata\ClassMetadata;
1112
use JMS\Serializer\Metadata\PropertyMetadata;
@@ -23,10 +24,19 @@ protected function setDiscriminator(DoctrineClassMetadata $doctrineMetadata, Cla
2324
empty($classMetadata->discriminatorMap) && !$classMetadata->discriminatorDisabled
2425
&& !empty($doctrineMetadata->discriminatorMap) && $doctrineMetadata->isRootEntity()
2526
) {
26-
$classMetadata->setDiscriminator(
27-
$doctrineMetadata->discriminatorColumn['name'],
28-
$doctrineMetadata->discriminatorMap,
29-
);
27+
if ($doctrineMetadata->discriminatorColumn instanceof DiscriminatorColumnMapping) {
28+
// Doctrine 3.1+
29+
$classMetadata->setDiscriminator(
30+
$doctrineMetadata->discriminatorColumn->name,
31+
$doctrineMetadata->discriminatorMap,
32+
);
33+
} else {
34+
// Doctrine up to 3.1
35+
$classMetadata->setDiscriminator(
36+
$doctrineMetadata->discriminatorColumn['name'],
37+
$doctrineMetadata->discriminatorMap,
38+
);
39+
}
3040
}
3141
}
3242

0 commit comments

Comments
 (0)