ApiGrammar::getDefaultQueryString()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace TomHart\Database\Database\Query\Grammars;
4
5
use Illuminate\Database\Query\Builder;
6
use Illuminate\Database\Query\Grammars\Grammar;
7
8
class ApiGrammar extends Grammar
9
{
10
11
    /**
12
     * @var string[]
13
     */
14
    private $defaultQueryString = [];
15
16
    /**
17
     * @return string[]
18
     */
19
    public function getDefaultQueryString(): array
20
    {
21
        return $this->defaultQueryString;
22
    }
23
24
    /**
25
     * @param string[] $defaultQueryString
26
     * @return ApiGrammar
27
     */
28
    public function setDefaultQueryString(array $defaultQueryString): self
29
    {
30
        $this->defaultQueryString = $defaultQueryString;
31
        return $this;
32
    }
33
34
    /**
35
     * Compile a select statement.
36
     * @param Builder $query
37
     * @return string
38
     */
39
    public function compileSelect(Builder $query): string
40
    {
41
        $queryString = $this->getDefaultQueryString();
42
        if ($query->limit) {
43
            $queryString[config('api-database.query_string_keys.limit', 'limit')] = $query->limit;
44
        }
45
46
        // Add the where clauses to the query string.
47
        foreach ($query->wheres as $where) {
48
            $queryString = $this->addWhereClause($where, $queryString);
49
        }
50
51
        if (empty($queryString)) {
52
            return '/' . $query->from;
53
        }
54
55
        return '/' . $query->from . '?' . http_build_query($queryString);
56
    }
57
58
    /**
59
     * Adds a where clause to the query string.
60
     * @param string[] $where
61
     * @param mixed[] $queryString
62
     * @return string[]
63
     */
64
    private function addWhereClause(array $where, array $queryString): array
65
    {
66
        switch ($where['type']) {
67
            default:
68
                $queryString[$where['column']] = $where['value'];
69
                break;
70
            case 'In':
71
                $queryString[$where['column']] = $where['values'];
72
                break;
73
        }
74
75
        return $queryString;
76
    }
77
}
78