Completed
Push — master ( 4f5242...1c6c97 )
by Derek Stephen
02:30
created

PersonRepository::checkMiddlename()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

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