Passed
Push — master ( 10db46...530f3a )
by Siim
13:34
created

ListTrait::getListData()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 2
dl 0
loc 6
rs 10
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->createListQueryBuilder();
32
        $this->addFilterQuery($qb, $filter);
33
        $this->addOrdersQuery($qb, $orders);
34
        return $qb->getQuery()->getArrayResult();
35
    }
36
37
    public function getListDataCount(FilterInterface $filter = null, ArrayCollection $orders = null)
38
    {
39
        $qb = $this->createListQueryBuilder();
40
        $this->addFilterQuery($qb, $filter);
41
        $this->addOrdersQuery($qb, $orders);
42
        $qb->select(
43
            $qb->expr()->count(AbstractRepository::FIELD_ID)
44
        );
45
46
        try {
47
            $response = $qb->getQuery()->getSingleResult(Query::HYDRATE_SINGLE_SCALAR);
48
        } catch (NoResultException $e) {
49
            $response = 0;
50
        } catch (NonUniqueResultException $e) {
51
            $response = 0;
52
        }
53
        return $response;
54
    }
55
56
    protected function addOrdersQuery(QueryBuilder $queryBuilder, ArrayCollection $orders = null)
57
    {
58
        if (!$orders) {
59
            return;
60
        }
61
        /** @var OrderInterface $order */
62
        foreach ($orders as $order) {
63
            $this->addOrderQuery($queryBuilder, $order);
64
        }
65
    }
66
}
67