Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
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 composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
},
"require-dev": {
"doctrine/annotations": "^2.0",
"doctrine/orm": "^2.9",
"doctrine/orm": "^2.9|^3.0",
"matthiasnoback/symfony-dependency-injection-test": "^4.3 || ^5.0",
"nyholm/psr7": "^1.5.1",
"php-cs-fixer/shim": "^3.14",
Expand Down
22 changes: 20 additions & 2 deletions src/Services/MeilisearchService.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace Meilisearch\Bundle\Services;

use Doctrine\Common\Util\ClassUtils;
use Doctrine\ORM\Proxy\DefaultProxyClassNameResolver;
use Doctrine\Persistence\ObjectManager;
use Meilisearch\Bundle\Collection;
use Meilisearch\Bundle\Engine;
Expand Down Expand Up @@ -236,7 +237,7 @@ private function getBaseClassName($objectOrClass): string
}

if (is_object($objectOrClass)) {
return ClassUtils::getClass($objectOrClass);
return self::resolveClass($objectOrClass);
}

return $objectOrClass;
Expand Down Expand Up @@ -306,7 +307,7 @@ private function getAggregatorsFromEntities(ObjectManager $objectManager, array
$aggregators = [];

foreach ($entities as $entity) {
$entityClassName = ClassUtils::getClass($entity);
$entityClassName = self::resolveClass($entity);
if (array_key_exists($entityClassName, $this->entitiesAggregators)) {
foreach ($this->entitiesAggregators[$entityClassName] as $aggregator) {
$aggregators[] = new $aggregator(
Expand Down Expand Up @@ -367,4 +368,21 @@ private function assertIsSearchable(string $className): void
throw new Exception('Class '.$className.' is not searchable.');
}
}

private static function resolveClass(object $object): string
{
static $resolver;

$resolver ??= (function () {
// Doctrine ORM v3+ compatibility
if (\class_exists(DefaultProxyClassNameResolver::class)) {
return fn (object $object) => DefaultProxyClassNameResolver::getClass($object);
}

// Legacy Doctrine ORM compatibility
return fn (object $object) => ClassUtils::getClass($object);
})();

return $resolver($object);
}
}