Passed
Push — master ( 7ad56b...6137ca )
by Kevin
03:11
created

ORMRepository::get()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 3
c 0
b 0
f 0
nc 2
nop 1
dl 0
loc 7
rs 10
ccs 4
cts 4
cp 1
crap 2

1 Method

Rating   Name   Duplication   Size   Complexity  
A ORMRepository::qb() 0 3 1
1
<?php
2
3
namespace Zenstruck\Porpaginas\Doctrine\Repository;
4
5
use Doctrine\ORM\EntityManagerInterface;
6
use Doctrine\ORM\EntityRepository;
7
use Doctrine\ORM\Mapping\ClassMetadata;
8
use Doctrine\ORM\Query;
9
use Doctrine\ORM\QueryBuilder;
10
use Doctrine\Persistence\ObjectRepository;
11
use Zenstruck\Porpaginas\Doctrine\Batch\ORMCountableBatchProcessor;
12
use Zenstruck\Porpaginas\Doctrine\ORMQueryResult;
13
use Zenstruck\Porpaginas\Repository;
14
15
/**
16
 * @mixin EntityRepository
17
 *
18
 * @author Kevin Bond <[email protected]>
19
 */
20
abstract class ORMRepository implements ObjectRepository, Repository
21
{
22
    private ?EntityRepository $repo = null;
23
24 1
    final public function __call($name, $arguments)
25
    {
26 1
        return $this->repo()->{$name}(...$arguments);
27
    }
28
29 1
    public function getIterator(): \Traversable
30
    {
31 1
        return $this->batchIterator();
32
    }
33
34 1
    public function batchIterator(int $chunkSize = 100): \Traversable
35
    {
36 1
        return static::createResult($this->qb())->batchIterator($chunkSize);
37
    }
38
39 1
    public function batchProcessor(int $chunkSize = 100): ORMCountableBatchProcessor
40
    {
41 1
        return static::createResult($this->qb())->batchProcessor($chunkSize);
42
    }
43
44 1
    public function count(): int
45
    {
46 1
        return \count(static::createResult($this->qb()));
47
    }
48
49
    /**
50
     * @see EntityRepository::find()
51
     */
52 1
    public function find($id, $lockMode = null, $lockVersion = null): ?object
53
    {
54 1
        return $this->repo()->find($id, $lockMode, $lockVersion);
55
    }
56
57
    /**
58
     * @see EntityRepository::findAll()
59
     */
60 1
    public function findAll(): array
61
    {
62 1
        return $this->repo()->findAll();
63
    }
64
65
    /**
66
     * @see EntityRepository::findBy()
67
     */
68 1
    public function findBy(array $criteria, ?array $orderBy = null, $limit = null, $offset = null): array
69
    {
70 1
        return $this->repo()->findBy($criteria, $orderBy, $limit, $offset);
71
    }
72
73
    /**
74
     * @see EntityRepository::findOneBy()
75
     */
76 2
    public function findOneBy(array $criteria, ?array $orderBy = null): ?object
77
    {
78 2
        return $this->repo()->findOneBy($criteria, $orderBy);
79
    }
80
81
    /**
82
     * @param Query|QueryBuilder $query
83
     */
84 2
    final protected static function createResult($query): ORMQueryResult
85
    {
86 2
        return new ORMQueryResult($query);
87
    }
88
89 2
    final protected function qb(string $alias = 'entity', ?string $indexBy = null): QueryBuilder
90
    {
91 2
        return $this->repo()->createQueryBuilder($alias, $indexBy);
92
    }
93
94 8
    final protected function repo(): EntityRepository
95
    {
96 8
        return $this->repo ?: $this->repo = static::createEntityRepository($this->em(), $this->em()->getClassMetadata($this->getClassName()));
97
    }
98
99
    abstract protected function em(): EntityManagerInterface;
100
101 8
    protected static function createEntityRepository(EntityManagerInterface $em, ClassMetadata $class): EntityRepository
102
    {
103 8
        return new EntityRepository($em, $class);
104
    }
105
}
106