1
0
mirror of synced 2025-02-02 21:41:45 +03:00
doctrine2/lib/Doctrine/ORM/Utility/HierarchyDiscriminatorResolver.php
2017-08-18 11:02:28 +02:00

42 lines
1.2 KiB
PHP

<?php
namespace Doctrine\ORM\Utility;
use Doctrine\Common\Persistence\Mapping\ClassMetadata;
use Doctrine\ORM\EntityManagerInterface;
/**
* @internal This class exists only to avoid code duplication, do not reuse it externally
*/
final class HierarchyDiscriminatorResolver
{
private function __construct()
{
}
/**
* This method is needed to make INSTANCEOF work correctly with inheritance: if the class at hand has inheritance,
* it extracts all the discriminators from the child classes and returns them
*/
public static function resolveDiscriminatorsForClass(
ClassMetadata $rootClassMetadata,
EntityManagerInterface $entityManager
): array {
$hierarchyClasses = $rootClassMetadata->subClasses;
$hierarchyClasses[] = $rootClassMetadata->name;
$discriminators = [];
foreach ($hierarchyClasses as $class) {
$currentMetadata = $entityManager->getClassMetadata($class);
$currentDiscriminator = $currentMetadata->discriminatorValue;
if (null !== $currentDiscriminator) {
$discriminators[$currentDiscriminator] = null;
}
}
return $discriminators;
}
}