Passed
Push — main ( efe307...afac3c )
by Nelson
01:24
created

QueryBuilder::limit()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 3
rs 10
1
<?php
2
/**
3
 * QueryBuilder
4
 * Clase encargada de generar consultas usando métodos de apoyo
5
 * @author nelson rojas
6
 */
7
class QueryBuilder {
8
9
    protected $_table = '';
10
    protected $_columns = '';
11
    protected $_conditions = '';
12
    protected $_joins = '';
13
    protected $_limit = '';
14
    protected $_group = '';
15
    protected $_having = '';
16
    protected $_orderBy = '';
17
18
    /**
19
     * constructor
20
     * @params table
21
     */
22
    public function __construct($tableName) {
23
        $this->_table = $tableName;
24
        return $this;
25
    }
26
27
    /**
28
     * columns
29
     * @params columns
30
     */
31
    public function columns($columns) {
32
        $this->_columns = $columns;
33
        return $this;
34
    }
35
36
    /**
37
     * where
38
     * @params condition
39
     * @params operator
40
     */
41
    public function where($condition) {
42
        $operator = 'AND';
43
        if (empty($this->_conditions)) {
44
            $this->_conditions = $condition;
45
        } else {
46
            $this->_conditions .= $operator . ' ' . $condition;
47
        }
48
49
        $this->_conditions .= ' '; // extra space after condition
50
        return $this;
51
    }
52
53
    /**
54
     * orWhere
55
     * @params condition
56
     * @params operator
57
     */
58
    public function orWhere($condition) {
59
        $operator = 'OR';
60
        if (empty($this->_conditions)) {
61
            $this->_conditions = $condition;
62
        } else {
63
            $this->_conditions .= $operator . ' ' . $condition;
64
        }
65
66
        $this->_conditions .= ' '; // extra space after condition
67
        return $this;
68
    }
69
70
    /**
71
     * join
72
     * @params join
73
     */
74
    public function join($join) {
75
        $this->_joins .= $join . ' ';
76
        return $this;
77
    }
78
79
    /**
80
     * limit
81
     * @params limit
82
     */
83
    public function limit($limit) {
84
        $this->_limit = 'LIMIT ' . $limit;
85
        return $this;
86
    }
87
88
    /**
89
     * group
90
     * @params group
91
     */
92
    public function group($group) {
93
        $this->_group = ' GROUP BY ' . $group;
94
        return $this;
95
    }
96
97
    /**
98
     * having
99
     * @params having
100
     */
101
    public function having($having) {
102
        $this->_having = ' HAVING ' . $having;
103
        return $this;
104
    }
105
106
    /**
107
     * orderBy
108
     * @params orderBy
109
     */
110
    public function orderBy($orderBy) {
111
        $this->_orderBy = ' ORDER BY ' . $orderBy;
112
        return $this;
113
    }
114
115
    /**
116
     * generar string con la consulta a partir de los métodos 
117
     * cargados
118
     */
119
    public function __toString() {
120
        $sql = 'SELECT ' . (empty($this->_columns) ? '*' : $this->_columns) . 
121
        	   ' ' . 'FROM ' . $this->_table;
122
123
        $check_for = [
124
            '_joins',
125
            '_conditions',
126
            '_group',
127
            '_having',
128
            '_limit',
129
            '_orderBy'
130
        ];
131
132
        if (!empty($this->_conditions)) {
133
            $this->_conditions = 'WHERE ' . $this->_conditions;
134
        }
135
136
        foreach ($check_for as $element) :
137
            if (!empty(trim($this->$element))) :
138
                $sql .= ' ' . $this->$element . ' ';
139
            endif;
140
141
        endforeach;
142
143
        return $sql;
144
    }        
145
146
    /**
147
     * clear
148
     */
149
    private function clear() {
150
        $clear_in = [
151
            '_table',
152
            '_joins',
153
            '_conditions',
154
            '_group',
155
            '_having',
156
            '_limit',
157
            '_orderBy'
158
        ];
159
        foreach ($clear_in as $elem) :
160
            $this->$elem = '';
161
        endforeach
162
        ;        
163
    }
164
165
    /**
166
     * destruct
167
     */
168
    function __destruct() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
169
        $this->clear();
170
    }
171
172
}
173