ListTrait::getListDataCount()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 15
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 10
nc 3
nop 2
dl 0
loc 15
rs 9.9332
c 0
b 0
f 0
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: siim
5
 * Date: 1.02.19
6
 * Time: 12:27
7
 */
8
9
namespace Sf4\Api\Repository\Traits;
10
11
use Doctrine\Common\Collections\ArrayCollection;
12
use Doctrine\ORM\NonUniqueResultException;
13
use Doctrine\ORM\NoResultException;
14
use Doctrine\ORM\Query;
15
use Doctrine\ORM\QueryBuilder;
16
use Sf4\Api\Dto\Filter\FilterInterface;
17
use Sf4\Api\Dto\Order\OrderInterface;
18
use Sf4\Api\Repository\AbstractRepository;
19
20
trait ListTrait
21
{
22
23
    abstract protected function createListQueryBuilder(): QueryBuilder;
24
25
    abstract protected function addFilterQuery(QueryBuilder $queryBuilder, FilterInterface $filter = null);
26
27
    abstract protected function addOrderQuery(QueryBuilder $queryBuilder, OrderInterface $order);
28
29
    public function getListData(FilterInterface $filter = null, ArrayCollection $orders = null): ?array
30
    {
31
        $qb = $this->createListQueryBuilderWithFilterAndOrderQueries($filter, $orders);
32
        return $qb->getQuery()->getArrayResult();
33
    }
34
35
    public function getListDataCount(FilterInterface $filter = null, ArrayCollection $orders = null)
36
    {
37
        $qb = $this->createListQueryBuilderWithFilterAndOrderQueries($filter, $orders);
38
        $qb->select(
39
            $qb->expr()->count(AbstractRepository::DB_FIELD_ID)
40
        );
41
42
        try {
43
            $response = $qb->getQuery()->getSingleResult(Query::HYDRATE_SINGLE_SCALAR);
44
        } catch (NoResultException $e) {
45
            $response = 0;
46
        } catch (NonUniqueResultException $e) {
47
            $response = 0;
48
        }
49
        return $response;
50
    }
51
52
    protected function createListQueryBuilderWithFilterAndOrderQueries(
53
        FilterInterface $filter = null,
54
        ArrayCollection $orders = null
55
    ): QueryBuilder {
56
        $queryBuilder = $this->createListQueryBuilder();
57
        $this->addFilterQuery($queryBuilder, $filter);
58
        $this->addOrdersQuery($queryBuilder, $orders);
59
60
        return $queryBuilder;
61
    }
62
63
    protected function addOrdersQuery(QueryBuilder $queryBuilder, ArrayCollection $orders = null): void
64
    {
65
        if (!$orders) {
66
            return;
67
        }
68
        /** @var OrderInterface $order */
69
        foreach ($orders as $order) {
70
            $this->addOrderQuery($queryBuilder, $order);
71
        }
72
    }
73
}
74