Completed
Push — master ( 03f81b...0833b6 )
by Derek Stephen
03:44 queued 10s
created

PersonRepository::checkBirthplace()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 7
ccs 5
cts 5
cp 1
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 1
crap 2
1
<?php
2
3
namespace Del\Person\Repository;
4
5
use Del\Person\Entity\Person as PersonEntity;
6
use Del\Person\Criteria\PersonCriteria;
7
use Doctrine\ORM\EntityRepository;
8
use Doctrine\ORM\QueryBuilder;
9
10
class PersonRepository extends EntityRepository
11
{
12
    /** @var QueryBuilder $qb */
13
    private $qb;
14
15
    /**
16
     * @param PersonEntity $person
17
     * @return PersonEntity
18
     * @throws \Doctrine\ORM\ORMException
19
     * @throws \Doctrine\ORM\OptimisticLockException
20
     */
21 2
    public function save(PersonEntity $person)
22
    {
23 2
        $this->_em->persist($person);
24 2
        $this->_em->flush();
25 2
        return $person;
26
    }
27
28
    /**
29
     * @param PersonEntity $person
30
     * @throws \Doctrine\ORM\ORMException
31
     * @throws \Doctrine\ORM\OptimisticLockException
32
     */
33 2
    public function delete(PersonEntity $person)
34
    {
35 2
        $this->_em->remove($person);
36 2
        $this->_em->flush();
37 2
    }
38
39
40
41
    /**
42
     * @param PersonCriteria $criteria
43
     * @return array
44
     */
45 1
    public function findByCriteria(PersonCriteria $criteria)
46
    {
47 1
        $this->qb = $this->createQueryBuilder('p');
48
49 1
        $this->checkId($criteria);
50 1
        $this->checkFirstname($criteria);
51 1
        $this->checkMiddlename($criteria);
52 1
        $this->checkLastname($criteria);
53 1
        $this->checkAka($criteria);
54 1
        $this->checkBirthplace($criteria);
55 1
        $this->checkCountry($criteria);
56 1
        $this->checkDob($criteria);
57 1
        $this->checkOrder($criteria);
58 1
        $this->checkLimit($criteria);
59 1
        $this->checkOffset($criteria);
60
61 1
        $query = $this->qb->getQuery();
62 1
        unset($this->qb);
63 1
        return $query->getResult();
64
    }
65
66
67
    /**
68
     * @param PersonCriteria $criteria
69
     */
70 1
    private function checkId(PersonCriteria $criteria)
71
    {
72 1
        if($criteria->hasId()) {
73 1
            $this->qb->where('p.id = :id');
74 1
            $this->qb->setParameter('id', $criteria->getId());
75
        }
76 1
    }
77
78
79
    /**
80
     * @param PersonCriteria $criteria
81
     */
82 1
    private function checkFirstname(PersonCriteria $criteria)
83
    {
84 1
        if($criteria->hasFirstname()) {
85 1
            $this->qb->where('p.firstname = :firstname');
86 1
            $this->qb->setParameter('firstname', $criteria->getFirstname());
87
        }
88 1
    }
89
90
91
    /**
92
     * @param PersonCriteria $criteria
93
     */
94 1
    private function checkMiddlename(PersonCriteria $criteria)
95
    {
96 1
        if($criteria->hasMiddlename()) {
97 1
            $this->qb->where('p.middlename = :middlename');
98 1
            $this->qb->setParameter('middlename', $criteria->getMiddlename());
99
        }
100 1
    }
101
102
    /**
103
     * @param PersonCriteria $criteria
104
     */
105 1
    private function checkLastname(PersonCriteria $criteria)
106
    {
107 1
        if($criteria->hasLastname()) {
108 1
            $this->qb->where('p.lastname = :lastname');
109 1
            $this->qb->setParameter('lastname', $criteria->getLastname());
110
        }
111 1
    }
112
113
    /**
114
     * @param PersonCriteria $criteria
115
     */
116 1
    private function checkAka(PersonCriteria $criteria)
117
    {
118 1
        if($criteria->hasAka()) {
119 1
            $this->qb->andWhere('p.aka = :aka');
120 1
            $this->qb->setParameter('aka', $criteria->getAka());
121
        }
122 1
    }
123
124
    /**
125
     * @param PersonCriteria $criteria
126
     */
127 1
    private function checkBirthplace(PersonCriteria $criteria)
128
    {
129 1
        if($criteria->hasBirthplace()) {
130 1
            $this->qb->andWhere('p.birthplace = :birthplace');
131 1
            $this->qb->setParameter('birthplace', $criteria->getBirthplace());
132
        }
133 1
    }
134
135
    /**
136
     * @param PersonCriteria $criteria
137
     */
138 1
    private function checkCountry(PersonCriteria $criteria)
139
    {
140 1
        if($criteria->hasCountry()) {
141 1
            $this->qb->andWhere('p.country = :country');
142 1
            $this->qb->setParameter('country', $criteria->getCountry());
143
        }
144 1
    }
145
146
    /**
147
     * @param PersonCriteria $criteria
148
     */
149 1
    private function checkDob(PersonCriteria $criteria)
150
    {
151 1
        if($criteria->hasDob()) {
152 1
            $this->qb->andWhere('p.dob = :dob');
153 1
            $this->qb->setParameter('dob', $criteria->getDob());
154
        }
155 1
    }
156
157
158
    /**
159
     * @param PersonCriteria $criteria
160
     */
161 1
    private function checkOrder(PersonCriteria $criteria)
162
    {
163 1
        $criteria->hasOrder() ? $this->qb->addOrderBy('p.'.$criteria->getOrder(), $criteria->getOrderDirection()) : null;
164
165 1
    }
166
167
    /**
168
     * @param PersonCriteria $criteria
169
     */
170 1
    private function checkLimit(PersonCriteria $criteria)
171
    {
172 1
        $criteria->hasLimit() ? $this->qb->setMaxResults($criteria->getLimit()) : null;
173 1
    }
174
175
    /**
176
     * @param PersonCriteria $criteria
177
     */
178 1
    private function checkOffset(PersonCriteria $criteria)
179
    {
180 1
        $criteria->hasOffset() ? $this->qb->setFirstResult($criteria->getOffset()) : null;
181 1
    }
182
}
183