Passed
Pull Request — master (#4)
by Alex
03:33
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
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 static($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
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
     * @return ArrayCollection
158
     */
159
    public function getParameters(): ArrayCollection
160
    {
161
        return $this->queryBuilder->getParameters();
162
    }
163
164
    /**
165
     * @param ArrayCollection $parameters
166
     *
167
     * @return $this|QueryBuilderInterface
168
     */
169
    public function setParameters(ArrayCollection $parameters): QueryBuilderInterface
170
    {
171
        $this->queryBuilder->setParameters($parameters);
172
173
        return $this;
174
    }
175
176
    /**
177
     * @param string      $name
178
     * @param mixed       $value
179
     * @param string|null $type
180
     *
181
     * @return $this|QueryBuilderInterface
182
     */
183
    public function setParameter(string $name, $value, ?string $type = null): QueryBuilderInterface
184
    {
185
        $this->queryBuilder->setParameter($name, $value, $type);
186
187
        return $this;
188
    }
189
190
    /**
191
     * @param QueryBuilderInterface $queryBuilder
192
     *
193
     * @return $this|QueryBuilderInterface
194
     */
195
    public function mergeParameters(QueryBuilderInterface $queryBuilder): QueryBuilderInterface
196
    {
197
        $parameters = $this->getParameters();
198
        foreach ($queryBuilder->getParameters() as $parameter) {
199
            $parameters->add($parameter);
200
        }
201
202
        return $this;
203
    }
204
}
205