dataTablesCountExportedQueryBuilder()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 5
c 2
b 0
f 0
dl 0
loc 10
rs 10
cc 1
nc 1
nop 1
1
<?php
2
3
/*
4
 * This file is part of the jquery-datatables-bundle package.
5
 *
6
 * (c) 2018 WEBEWEB
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace WBW\Bundle\JQuery\DataTablesBundle\Repository;
13
14
use Doctrine\ORM\EntityRepository;
15
use Doctrine\ORM\QueryBuilder;
16
use Throwable;
17
use WBW\Bundle\JQuery\DataTablesBundle\Api\DataTablesWrapperInterface;
18
use WBW\Bundle\JQuery\DataTablesBundle\Helper\DataTablesRepositoryHelper;
19
20
/**
21
 * Default DataTables repository.
22
 *
23
 * @author webeweb <https://github.com/webeweb>
24
 * @package WBW\Bundle\JQuery\DataTablesBundle\Repository
25
 * @abstract
26
 */
27
abstract class DefaultDataTablesRepository extends EntityRepository implements DataTablesRepositoryInterface {
28
29
    /**
30
     * {@inheritDoc}
31
     * @throws Throwable Throws an exception if an error occurs.
32
     */
33
    public function dataTablesCountExported(DataTablesWrapperInterface $dtWrapper): int {
34
35
        $qb = $this->dataTablesCountExportedQueryBuilder($dtWrapper);
36
37
        return intval($qb->getQuery()->getSingleScalarResult());
38
    }
39
40
    /**
41
     * Create a query builder "count exported".
42
     *
43
     * @param DataTablesWrapperInterface $dtWrapper The wrapper.
44
     * @return QueryBuilder Returns the query builder "count exported".
45
     */
46
    protected function dataTablesCountExportedQueryBuilder(DataTablesWrapperInterface $dtWrapper): QueryBuilder {
47
48
        $prefix = $dtWrapper->getProvider()->getPrefix();
49
50
        $qb = $this->createQueryBuilder($prefix)
51
            ->select("COUNT($prefix)");
52
53
        DataTablesRepositoryHelper::appendWhere($qb, $dtWrapper);
54
55
        return $qb;
56
    }
57
58
    /**
59
     * {@inheritDoc}
60
     * @throws Throwable Throws an exception if an error occurs.
61
     */
62
    public function dataTablesCountFiltered(DataTablesWrapperInterface $dtWrapper): int {
63
64
        $qb = $this->dataTablesCountFilteredQueryBuilder($dtWrapper);
65
66
        return intval($qb->getQuery()->getSingleScalarResult());
67
    }
68
69
    /**
70
     * Create a query builder "count filtered".
71
     *
72
     * @param DataTablesWrapperInterface $dtWrapper The wrapper.
73
     * @return QueryBuilder Returns the query builder "count filtered".
74
     */
75
    protected function dataTablesCountFilteredQueryBuilder(DataTablesWrapperInterface $dtWrapper): QueryBuilder {
76
77
        $prefix = $dtWrapper->getMapping()->getPrefix();
78
79
        $qb = $this->createQueryBuilder($prefix)
80
            ->select("COUNT($prefix)");
81
82
        DataTablesRepositoryHelper::appendWhere($qb, $dtWrapper);
83
84
        return $qb;
85
    }
86
87
    /**
88
     * {@inheritDoc}
89
     * @throws Throwable Throws an exception if an error occurs.
90
     */
91
    public function dataTablesCountTotal(DataTablesWrapperInterface $dtWrapper): int {
92
93
        $qb = $this->dataTablesCountTotalQueryBuilder($dtWrapper);
94
95
        return intval($qb->getQuery()->getSingleScalarResult());
96
    }
97
98
    /**
99
     * Create a query builder "Count total".
100
     *
101
     * @param DataTablesWrapperInterface $dtWrapper The wrapper.
102
     * @return QueryBuilder Returns the query builder "count total".
103
     */
104
    protected function dataTablesCountTotalQueryBuilder(DataTablesWrapperInterface $dtWrapper): QueryBuilder {
105
106
        $prefix = $dtWrapper->getMapping()->getPrefix();
107
108
        return $this->createQueryBuilder($prefix)
109
            ->select("COUNT($prefix)");
110
    }
111
112
    /**
113
     * {@inheritDoc}
114
     */
115
    public function dataTablesExportAll(DataTablesWrapperInterface $dtWrapper): QueryBuilder {
116
        return $this->dataTablesExportAllQueryBuilder($dtWrapper);
117
    }
118
119
    /**
120
     * Create a query builder "export all".
121
     *
122
     * @param DataTablesWrapperInterface $dtWrapper The wrapper.
123
     * @return QueryBuilder Returns the query builder "export all".
124
     */
125
    protected function dataTablesExportAllQueryBuilder(DataTablesWrapperInterface $dtWrapper): QueryBuilder {
126
127
        $prefix = $dtWrapper->getProvider()->getPrefix();
128
129
        $qb = $this->createQueryBuilder($prefix);
130
131
        DataTablesRepositoryHelper::appendWhere($qb, $dtWrapper);
132
133
        return $qb;
134
    }
135
136
    /**
137
     * {@inheritDoc}
138
     */
139
    public function dataTablesFindAll(DataTablesWrapperInterface $dtWrapper): array {
140
141
        $qb = $this->dataTablesFindAllQueryBuilder($dtWrapper);
142
143
        return $qb->getQuery()->getResult();
0 ignored issues
show
Bug Best Practice introduced by
The expression return $qb->getQuery()->getResult() could return the type integer which is incompatible with the type-hinted return array. Consider adding an additional type-check to rule them out.
Loading history...
144
    }
145
146
    /**
147
     * Create a query builder "find all".
148
     *
149
     * @param DataTablesWrapperInterface $dtWrapper The wrapper.
150
     * @return QueryBuilder Returns the query builder "find all".
151
     */
152
    protected function dataTablesFindAllQueryBuilder(DataTablesWrapperInterface $dtWrapper): QueryBuilder {
153
154
        $prefix = $dtWrapper->getMapping()->getPrefix();
155
156
        $qb = $this->createQueryBuilder($prefix)
157
            ->setFirstResult($dtWrapper->getRequest()->getStart());
158
159
        if (0 < $dtWrapper->getRequest()->getLength()) {
160
            $qb->setMaxResults($dtWrapper->getRequest()->getLength());
161
        }
162
163
        DataTablesRepositoryHelper::appendWhere($qb, $dtWrapper);
164
        DataTablesRepositoryHelper::appendOrder($qb, $dtWrapper);
165
166
        return $qb;
167
    }
168
}
169