loadObjectsIfPossible()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 17
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 10
nc 3
nop 2
dl 0
loc 17
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace Xsolve\Associate\AssociationCollecting;
4
5
use Xsolve\Associate\Loader\DoctrineOrmEntityLoader;
6
use Xsolve\Associate\Metadata\AssociationMetadataWrapper;
7
use Xsolve\Associate\Metadata\ClassMetadataWrapper;
8
use Xsolve\Associate\Metadata\MetadataWrapperProvider;
9
10
class DoctrineOrmAssociationCollectingStrategy extends BasicAssociationCollectingStrategy
11
{
12
    /**
13
     * @var MetadataWrapperProvider
14
     */
15
    protected $metadataWrapperProvider;
16
17
    /**
18
     * @var DoctrineOrmEntityLoader
19
     */
20
    protected $doctrineOrmEntityLoader;
21
22
    /**
23
     * @param MetadataWrapperProvider $metadataWrapperProvider
24
     * @param DoctrineOrmEntityLoader $doctrineOrmEntityLoader
25
     */
26
    public function __construct(
27
        MetadataWrapperProvider $metadataWrapperProvider,
28
        DoctrineOrmEntityLoader $doctrineOrmEntityLoader
29
    ) {
30
        parent::__construct();
31
32
        $this->metadataWrapperProvider = $metadataWrapperProvider;
33
        $this->doctrineOrmEntityLoader = $doctrineOrmEntityLoader;
34
    }
35
36
    /**
37
     * @param array  $objects
38
     * @param string $associationName
39
     *
40
     * @return array
41
     */
42
    public function collect(array $objects, string $associationName): array
43
    {
44
        $this->loadObjectsIfPossible($objects, $associationName);
45
46
        return parent::collect($objects, $associationName);
47
    }
48
49
    /**
50
     * {@inheritdoc}
51
     */
52
    protected function loadObjectsIfPossible(array $objects, string $associationName)
53
    {
54
        $classMetadataWrapper = $this->metadataWrapperProvider->getClassMetadataWrapperByObjects($objects);
55
        if (!$classMetadataWrapper instanceof ClassMetadataWrapper) {
56
            return;
57
        }
58
59
        $this->doctrineOrmEntityLoader->loadUninitializedProxies($objects, $classMetadataWrapper);
60
61
        $associationMetadataWrapper = $classMetadataWrapper->getAssociationMetadataWrapper($associationName);
62
        if (!$associationMetadataWrapper instanceof AssociationMetadataWrapper) {
63
            return;
64
        }
65
66
        $this->doctrineOrmEntityLoader->loadAssociatedUninitializedCollectionsAndProxies(
67
            $objects,
68
            $associationMetadataWrapper
69
        );
70
    }
71
}
72