UninitializedProxiesLoader::load()   A
last analyzed

Complexity

Conditions 6
Paths 9

Size

Total Lines 27
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
eloc 15
c 1
b 0
f 0
nc 9
nop 2
dl 0
loc 27
rs 9.2222
1
<?php
2
3
namespace Malef\Associate\DoctrineOrm\Loader;
4
5
use Doctrine\Common\Collections\ArrayCollection;
6
use Doctrine\ORM\Proxy\Proxy;
7
use Malef\Associate\DoctrineOrm\Loader\ChunkingStrategy\ChunkingStrategy;
8
use Malef\Associate\DoctrineOrm\Metadata\ClassMetadataAdapter;
9
10
class UninitializedProxiesLoader
11
{
12
    /**
13
     * @var ChunkingStrategy
14
     */
15
    protected $chunkingStrategy;
16
17
    public function __construct(ChunkingStrategy $chunkingStrategy)
18
    {
19
        $this->chunkingStrategy = $chunkingStrategy;
20
    }
21
22
    public function load(
23
        ArrayCollection $entities,
24
        ClassMetadataAdapter $classMetadataAdapter
25
    ) {
26
        $uninitializedProxies = new ArrayCollection();
27
        foreach ($entities->getValues() as $entity) {
28
            if ($entity instanceof Proxy && !$entity->__isInitialized()) {
29
                $uninitializedProxies->add($entity);
30
            }
31
        }
32
33
        if ($uninitializedProxies->isEmpty()) {
34
            return;
35
        }
36
37
        foreach ($this->chunkingStrategy->chunk($uninitializedProxies) as $uninitializedProxiesChunk) {
38
            $queryBuilder = $classMetadataAdapter->createQueryBuilder('e');
39
40
            $queryBuilder
41
                ->andWhere(
42
                    $queryBuilder->expr()->in(
43
                        'e',
44
                        $classMetadataAdapter->getIdentifierValueForMany($uninitializedProxiesChunk)->getValues()
45
                    )
46
                )
47
                ->getQuery()
48
                ->execute();
49
        }
50
    }
51
}
52