Issues (47)

lib/Query.php (9 issues)

1
<?php
2
3
namespace MocOrm\Model;
4
5
abstract class Query
6
{
7
    /**
8
     * @var array Save the current query for search on database
9
     */
10
    protected $_current_custom_query = [];
11
12
    /**
13
     * @var array Values on currents join
14
     */
15
    protected $_joins = [];
16
17
    /**
18
     * @var string Values on currents group in query
19
     */
20
    protected $_group;
21
22
    /**
23
     * This function is a closed on 'SELECT' and execute all parameter
24
     * @return array $objects Return all data on parameters before sending
25
     */
26
    public function done()
27
    {
28
        $this->_data = [];
0 ignored issues
show
Bug Best Practice introduced by
The property _data does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
29
        $query = $this->queryBuilder();
30
31
        $objetos = $this->query($query, $this->_current_custom_query_values);
0 ignored issues
show
The method query() does not exist on MocOrm\Model\Query. Since it exists in all sub-types, consider adding an abstract or default implementation to MocOrm\Model\Query. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

31
        /** @scrutinizer ignore-call */ 
32
        $objetos = $this->query($query, $this->_current_custom_query_values);
Loading history...
32
33
        $this->_current_custom_query_values = [];
0 ignored issues
show
Bug Best Practice introduced by
The property _current_custom_query_values does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
34
35
        $this->_data = $objetos;
36
37
        $this->cleanNewData();
0 ignored issues
show
The method cleanNewData() does not exist on MocOrm\Model\Query. Since it exists in all sub-types, consider adding an abstract or default implementation to MocOrm\Model\Query. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

37
        $this->/** @scrutinizer ignore-call */ 
38
               cleanNewData();
Loading history...
38
39
        return $objetos;
40
    }
41
42
    /**
43
     * This function is a mirror of 'where' on database
44
     * @param string|null $parameter The colunm for compare
45
     * @param string|null $value Value to compare
46
     * @return $this This object for others interation
47
     * @throws \Exception Case types on parameter is invalid or not set.
48
     */
49
    final public function where($parameter = null, $value = null)
50
    {
51
        if (!is_string($parameter)) throw new \Exception('Invalid parameter type.');
52
        if (!isset($value)) throw new \Exception('This value not set.');
53
54
        $this->_current_custom_query[] = " WHERE $parameter = ? ";
55
        $this->_current_custom_query_values[] = $value;
0 ignored issues
show
Bug Best Practice introduced by
The property _current_custom_query_values does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
56
57
        return $this;
58
    }
59
60
    /**
61
     * This function is a mirror of 'AND' on database
62
     * @param string|null $parameter The colunm for compare
63
     * @param string|null $value Value to compare
64
     * @return $this This object for others interation
65
     * @throws \Exception Case types on parameter is invalid or not set.
66
     */
67
    final public function and ($parameter = null, $value = null)
68
    {
69
        if (!is_string($parameter)) throw new \Exception('Invalid parameter type.');
70
        if (!isset($value)) throw new \Exception('This value not set.');
71
72
        $this->_current_custom_query[] = " AND $parameter = ? ";
73
        $this->_current_custom_query_values[] = $value;
0 ignored issues
show
Bug Best Practice introduced by
The property _current_custom_query_values does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
74
75
        return $this;
76
    }
77
78
    /**
79
     * This function is a mirror of 'OR' on database
80
     * @param string|null $parameter The colunm for compare
81
     * @param string|null $value Value to compare
82
     * @return $this This object for others interation
83
     * @throws \Exception Case types on parameter is invalid or not set.
84
     */
85
    final public function or ($parameter = null, $value = null)
86
    {
87
        if (!is_string($parameter)) throw new \Exception('Invalid parameter type.');
88
        if (!isset($value)) throw new \Exception('This value not set.');
89
90
        $this->_current_custom_query[] = " OR $parameter = ? ";
91
        $this->_current_custom_query_values[] = $value;
0 ignored issues
show
Bug Best Practice introduced by
The property _current_custom_query_values does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
92
93
        return $this;
94
    }
95
96
    /**
97
     * This function is a mirror of 'Order By' on database
98
     * @param string|null $parameter The colunm for compare
99
     * @param string|null $value Value to compare
100
     * @return $this This object for others interation
101
     * @throws \Exception Case types on parameter is invalid or not set.
102
     */
103
    final public function orderBy($parameter = null, $value = null)
104
    {
105
        if (!is_string($parameter)) throw new \Exception('Invalid parameter type.');
106
        if (!isset($value)) throw new \Exception('This value not set.');
107
        if (!is_string($value)) throw new \Exception('Don\'t accepted this type on value.');
0 ignored issues
show
The condition is_string($value) is always true.
Loading history...
108
        if ($value != 'ASC' AND $value != 'DESC') throw new \Exception('This value not found.');
109
110
        $this->_current_custom_query[] = " ORDER BY $parameter $value";
111
112
        return $this;
113
    }
114
115
    /**
116
     * This function is a mirror of 'LEFT JOIN' on database
117
     * @param string $join
118
     * @return $this
119
     */
120
    final public function custom($partialQuery)
121
    {
122
        if (!is_string($partialQuery)) throw new \Exception('Invalid parameter type.');
123
124
        $this->_current_custom_query[] = $partialQuery;
125
126
        return $this;
127
    }
128
129
    /**
130
     * This function is a mirror of 'LEFT JOIN' on database
131
     * @param string $join
132
     * @return $this
133
     */
134
    final public function leftJoin($join = '')
135
    {
136
        $this->_joins[] = ' LEFT JOIN ' . $join;
137
        return $this;
138
    }
139
140
    /**
141
     * This function is a mirror of 'Right JOIN' on database
142
     * @param string $join
143
     * @return $this
144
     */
145
    final public function rightJoin($join = '')
146
    {
147
        $this->_joins[] = ' RIGHT JOIN ' . $join;
148
        return $this;
149
    }
150
151
    /**
152
     * This function is a mirror of 'INNER JOIN' on database
153
     * @param string $join
154
     * @return $this
155
     */
156
    final public function innerJoin($join = '')
157
    {
158
        $this->_joins[] = ' INNER JOIN ' . $join;
159
        return $this;
160
    }
161
162
    /**
163
     * This function is a mirror of 'FULL OUTER JOIN' on database
164
     * @param string $join
165
     * @return $this
166
     */
167
    final public function fullOuterJoin($join = '')
168
    {
169
        $this->_joins[] = ' FULL OUTER JOIN ' . $join;
170
        return $this;
171
    }
172
173
    /**
174
     * This function is a mirror of 'Group By' on database
175
     * @param string $colunm
176
     * @return $this
177
     * @throws \Exception
178
     */
179
    final public function groupBy($colunm)
180
    {
181
        if (!is_string($colunm)) throw new \Exception('The colunm isn\'t an string.');
0 ignored issues
show
The condition is_string($colunm) is always true.
Loading history...
182
183
        $this->_group = " GROUP BY $colunm ";
184
185
        return $this;
186
    }
187
188
    /**
189
     * Builder query
190
     * @return string The query mounted for using.
191
     */
192
    final protected function queryBuilder()
193
    {
194
        $sql = array_shift($this->_current_custom_query);
195
196
        $sql .= implode('', $this->_joins);
197
198
        $last = array_pop($this->_current_custom_query);
199
200
        $sql .= implode('', $this->_current_custom_query);
201
202
        if (substr_count($last, 'ORDER BY') > 0) {
203
            $sql .= isset($this->_group) ? $this->_group : '';
204
            $sql .= $last;
205
        } else {
206
            $sql .= $last;
207
            $sql .= isset($this->_group) ? $this->_group : '';
208
        }
209
210
        $this->_current_custom_query = [];
211
212
        return $sql;
213
    }
214
}