|
4 | 4 |
|
5 | 5 | namespace Meilisearch\Bundle\Services;
|
6 | 6 |
|
7 |
| -use Doctrine\Common\Util\ClassUtils; |
| 7 | +use Doctrine\ORM\Proxy\DefaultProxyClassNameResolver; |
8 | 8 | use Doctrine\Persistence\ObjectManager;
|
9 | 9 | use Meilisearch\Bundle\Collection;
|
10 | 10 | use Meilisearch\Bundle\Engine;
|
|
18 | 18 | use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
|
19 | 19 | use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
|
20 | 20 |
|
| 21 | +use function class_exists; |
| 22 | + |
21 | 23 | final class MeilisearchService implements SearchService
|
22 | 24 | {
|
23 | 25 | private NormalizerInterface $normalizer;
|
@@ -236,7 +238,7 @@ private function getBaseClassName($objectOrClass): string
|
236 | 238 | }
|
237 | 239 |
|
238 | 240 | if (is_object($objectOrClass)) {
|
239 |
| - return ClassUtils::getClass($objectOrClass); |
| 241 | + return self::resolveClass($objectOrClass); |
240 | 242 | }
|
241 | 243 |
|
242 | 244 | return $objectOrClass;
|
@@ -306,7 +308,7 @@ private function getAggregatorsFromEntities(ObjectManager $objectManager, array
|
306 | 308 | $aggregators = [];
|
307 | 309 |
|
308 | 310 | foreach ($entities as $entity) {
|
309 |
| - $entityClassName = ClassUtils::getClass($entity); |
| 311 | + $entityClassName = self::resolveClass($entity); |
310 | 312 | if (array_key_exists($entityClassName, $this->entitiesAggregators)) {
|
311 | 313 | foreach ($this->entitiesAggregators[$entityClassName] as $aggregator) {
|
312 | 314 | $aggregators[] = new $aggregator(
|
@@ -367,4 +369,22 @@ private function assertIsSearchable(string $className): void
|
367 | 369 | throw new Exception('Class '.$className.' is not searchable.');
|
368 | 370 | }
|
369 | 371 | }
|
| 372 | + |
| 373 | + private static function resolveClass(object $object): string |
| 374 | + { |
| 375 | + static $resolver; |
| 376 | + |
| 377 | + $resolver ??= (function () { |
| 378 | + |
| 379 | + // Doctrine ORM v3+ compatibility |
| 380 | + if (class_exists(DefaultProxyClassNameResolver::class)) { |
| 381 | + return fn (object $object) => DefaultProxyClassNameResolver::getClass($object); |
| 382 | + } |
| 383 | + |
| 384 | + // Legacy Doctrine ORM compatibility |
| 385 | + return fn (object $object) => \Doctrine\Common\Util\ClassUtils::getClass($object); |
| 386 | + })(); |
| 387 | + |
| 388 | + return $resolver($object); |
| 389 | + } |
370 | 390 | }
|
0 commit comments