Passed
Pull Request — master (#5)
by Alex
03:19
created

QueryBuilder::setParameter()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 2
c 1
b 0
f 0
dl 0
loc 5
rs 10
cc 1
nc 1
nop 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Arp\DoctrineQueryFilter;
6
7
use Doctrine\Common\Collections\ArrayCollection;
8
use Doctrine\ORM\EntityManager;
9
use Doctrine\ORM\Query;
10
use Doctrine\ORM\Query\Expr;
11
use Doctrine\ORM\QueryBuilder as DoctrineQueryBuilder;
12
13
/**
14
 * @author  Alex Patterson <[email protected]>
15
 * @package Arp\DoctrineQueryFilter\Query
16
 */
17
final class QueryBuilder implements QueryBuilderInterface
18
{
19
    /**
20
     * @var DoctrineQueryBuilder
21
     */
22
    private DoctrineQueryBuilder $queryBuilder;
23
24
    /**
25
     * @param DoctrineQueryBuilder $queryBuilder
26
     */
27
    public function __construct(DoctrineQueryBuilder $queryBuilder)
28
    {
29
        $this->queryBuilder = $queryBuilder;
30
    }
31
32
    /**
33
     * @return QueryBuilderInterface
34
     */
35
    public function createQueryBuilder(): QueryBuilderInterface
36
    {
37
        return new self($this->getEntityManager()->createQueryBuilder());
38
    }
39
40
    /**
41
     * @return EntityManager
42
     */
43
    public function getEntityManager(): EntityManager
44
    {
45
        return $this->queryBuilder->getEntityManager();
46
    }
47
48
    /**
49
     * @return string
50
     */
51
    public function getRootAlias(): string
52
    {
53
        return $this->queryBuilder->getRootAliases()[0] ?? '';
54
    }
55
56
    /**
57
     * @return Query
58
     */
59
    public function getQuery(): Query
60
    {
61
        return $this->queryBuilder->getQuery();
62
    }
63
64
    /**
65
     * Return the wrapped Doctrine query builder instance
66
     *
67
     * @return DoctrineQueryBuilder
68
     */
69
    public function getWrappedQueryBuilder(): DoctrineQueryBuilder
70
    {
71
        return $this->queryBuilder;
72
    }
73
74
    /**
75
     * @return Expr
76
     */
77
    public function expr(): Expr
78
    {
79
        return $this->queryBuilder->expr();
80
    }
81
82
    /**
83
     * @return  array<mixed>
84
     */
85
    public function getQueryParts(): array
86
    {
87
        return $this->queryBuilder->getDQLParts();
88
    }
89
90
    /**
91
     * @param mixed ...$args
92
     *
93
     * @return $this
94
     */
95
    public function orWhere(...$args): QueryBuilderInterface
96
    {
97
        $this->queryBuilder->orWhere(...$args);
98
99
        return $this;
100
    }
101
102
    /**
103
     * @param mixed ...$args
104
     *
105
     * @return $this
106
     */
107
    public function andWhere(...$args): QueryBuilderInterface
108
    {
109
        $this->queryBuilder->andWhere(...$args);
110
111
        return $this;
112
    }
113
114
    /**
115
     * @param string      $name
116
     * @param string      $alias
117
     * @param string      $type
118
     * @param string|null $condition
119
     * @param string|null $indexBy
120
     *
121
     * @return $this
122
     */
123
    public function innerJoin(
124
        string $name,
125
        string $alias,
126
        string $type,
127
        $condition = null,
128
        string $indexBy = null
129
    ): QueryBuilderInterface {
130
        $this->queryBuilder->innerJoin($name, $alias, $type, $condition, $indexBy);
131
132
        return $this;
133
    }
134
135
    /**
136
     * @param string      $name
137
     * @param string      $alias
138
     * @param string      $type
139
     * @param string|null $condition
140
     * @param string|null $indexBy
141
     *
142
     * @return $this
143
     */
144
    public function leftJoin(
145
        string $name,
146
        string $alias,
147
        string $type,
148
        $condition = null,
149
        string $indexBy = null
150
    ): QueryBuilderInterface {
151
        $this->queryBuilder->leftJoin($name, $alias, $type, $condition, $indexBy);
152
153
        return $this;
154
    }
155
156
    /**
157
     * @param Expr\OrderBy|string $sort
158
     * @param string|null         $order
159
     *
160
     * @return QueryBuilderInterface
161
     */
162
    public function orderBy($sort, ?string $order = null): QueryBuilderInterface
163
    {
164
        $this->queryBuilder->orderBy($sort, $order);
165
166
        return $this;
167
    }
168
169
    /**
170
     * @param Expr\OrderBy|string $sort
171
     * @param string|null         $order
172
     *
173
     * @return QueryBuilderInterface
174
     */
175
    public function addOrderBy($sort, ?string $order = null): QueryBuilderInterface
176
    {
177
        $this->queryBuilder->addOrderBy($sort, $order);
178
179
        return $this;
180
    }
181
182
    /**
183
     * @return ArrayCollection<mixed, Query\Parameter>
184
     */
185
    public function getParameters(): ArrayCollection
186
    {
187
        return $this->queryBuilder->getParameters();
188
    }
189
190
    /**
191
     * @param ArrayCollection<mixed, Query\Parameter> $parameters
192
     *
193
     * @return $this|QueryBuilderInterface
194
     */
195
    public function setParameters(ArrayCollection $parameters): QueryBuilderInterface
196
    {
197
        $this->queryBuilder->setParameters($parameters);
198
199
        return $this;
200
    }
201
202
    /**
203
     * @param string      $name
204
     * @param mixed       $value
205
     * @param string|null $type
206
     *
207
     * @return $this|QueryBuilderInterface
208
     */
209
    public function setParameter(string $name, $value, ?string $type = null): QueryBuilderInterface
210
    {
211
        $this->queryBuilder->setParameter($name, $value, $type);
212
213
        return $this;
214
    }
215
216
    /**
217
     * @param QueryBuilderInterface $queryBuilder
218
     *
219
     * @return $this|QueryBuilderInterface
220
     */
221
    public function mergeParameters(QueryBuilderInterface $queryBuilder): QueryBuilderInterface
222
    {
223
        $parameters = $this->getParameters();
224
        foreach ($queryBuilder->getParameters() as $parameter) {
225
            $parameters->add($parameter);
226
        }
227
228
        return $this;
229
    }
230
}
231