Issues (9)

example/example.php (3 issues)

1
<?php
2
3
require_once __DIR__ . "/../vendor/autoload.php";
4
5
//connection config file
6
require_once __DIR__ . "/config.php";
7
require_once __DIR__ . "/helpers.php";
8
9
use Willry\QueryBuilder\Connect;
10
use Willry\QueryBuilder\Create;
11
use Willry\QueryBuilder\Delete;
12
use Willry\QueryBuilder\Query;
13
use Willry\QueryBuilder\QueryHelpers;
14
use Willry\QueryBuilder\Update;
15
16
17
18
/**
19
 * Informar um array onde a chave é o nome da conexão
20
 * e dentro vai os dados da conexão para o PDO
21
 */
22
$connections = [
23
    'default' => [
24
        "driver" => "mysql",
25
        "host" => "127.0.0.1",
26
        "port" => "3306",
27
        "dbname" => "fullstackphp",
28
        "username" => "root",
29
        "passwd" => "root",
30
        "options" => [
31
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
32
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
33
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
34
            PDO::ATTR_CASE => PDO::CASE_NATURAL
35
        ]
36
    ],
37
    'banco_teste' => [
38
        "driver" => "mysql",
39
        "host" => "127.0.0.1",
40
        "port" => "3306",
41
        "dbname" => "teste",
42
        "username" => "root",
43
        "passwd" => "root",
44
        "options" => [
45
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
46
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
47
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
48
            PDO::ATTR_CASE => PDO::CASE_NATURAL
49
        ]
50
    ],
51
];
52
53
/**
54
 * @important
55
 *
56
 * Aqui injeta as configurações
57
 */
58
Connect::config($connections);
59
/**
60
 * Leitura de dados basicos(trazer multiplos resultados)
61
 */
62
$data = (new Query())
63
    ->from('users as u')
64
    ->select(["u.id", "u.first_name", "u.email"]) // OR ->selectRaw("u.id, u.first_name, u.email")
65
    ->selectRaw("IF(1 = ?, 'verdadeiro','falso') AS boolean", [1])
66
    ->where("id >= ?", [1])
67
    ->where("email is not null")
68
    ->order("id ASC")
69
    ->get();
70
71
72
var_dump($data);
73
74
75
/**
76
 * Leitura de dados basicos(trazer único resultado)
77
 */
78
$data = (new Query())
79
    ->from('users as u')
80
    ->select(["u.id", "u.first_name", "u.email"]) // OR ->selectRaw("u.id, u.first_name, u.email")
81
    ->selectRaw("IF(1 = ?, 'verdadeiro','falso') AS boolean", [1])
82
    ->where("id <= ?", [5])
83
    ->where("email is not null")
84
    ->order("id ASC")
85
    ->first();
86
var_dump($data);
87
88
89
/**
90
 * Escolher a conexão de banco de dados
91
 */
92
$nomeConexao = 'default';
93
$data = (new Query($nomeConexao))
94
    ->from('users as u')
95
    ->select(["u.id", "u.first_name", "u.email"]) // OR ->selectRaw("u.id, u.first_name, u.email")
96
    ->selectRaw("IF(1 = ?, 'verdadeiro','falso') AS boolean", [1])
97
    ->where("id <= ?", [5])
98
    ->where("email is not null")
99
    ->order("id ASC")
100
    ->first();
101
102
var_dump($data);
103
104
105
/**
106
 * JOINS
107
 * join()
108
 * leftJoin()
109
 * rightJoin()
110
 */
111
$join = (new Query())
112
    ->from('users as u')
113
    ->selectRaw("u.id, u.first_name, u.email, ad.street as address")
114
    ->leftJoin("address as ad", "ad.user_id = u.id and ad.street LIKE ?", ['%a%'])
115
    ->limit(3)
116
    ->get();
117
var_dump($join);
118
119
120
/**
121
 * Join com subquery
122
 *
123
 * joinSub
124
 * leftJoinSub
125
 * rightJoinSub
126
 */
127
128
/** objeto de query builder, sem executar(->get(), ->first())*/
129
$address = (new Query())
130
    ->from('address as u')
131
    ->where("street is not null")
132
    ->where('id > ?', [1]);
133
134
$users = (new Query())
135
    ->from('users as u')
136
    ->selectRaw("u.id as usuario, sub.street as rua")
137
    ->leftJoinSub($address, 'sub', "sub.user_id = u.id AND 1 = ?", [1]);
138
var_dump($users->get());
139
140
/**
141
 * Selecionar de uma subquery
142
 *
143
 * Select * from (select * from users) as sub
144
 */
145
$dbSub = (new Query())->from('users as u')->where("2 = ?", [2])->limit(10);
146
147
$data = (new Query())->fromSubQuery(function (Query $query) {
148
    return $query->from("users")->selectRaw('id,first_name')->where("1 = ?", [1])->limit(10);
149
}, 'sub')
150
    ->where('4 = ?', [4])
151
    ->joinSub($dbSub, 'sub2', 'sub2.id = sub.id and 3 = ?', [3]);
152
var_dump($data->toSQL(), $data->flatBindings(), $data->get());
153
154
155
/**
156
 * WHERE IN
157
 */
158
$dinamico = (new Query())->from("users as u")
159
    ->selectRaw("u.id, u.first_name, u.email")
160
    ->whereIn("u.id", [1, 2, 3, 4, 5])
161
    ->get();
162
var_dump($dinamico);
163
164
/**
165
 * Create
166
 */
167
$create = (new Create())->from("users")
168
    ->create([
169
        'first_name' => 'fulano',
170
        'last_name' => 'qualquer' . generateRandomString(),
0 ignored issues
show
Are you sure generateRandomString() of type false|string can be used in concatenation? ( Ignorable by Annotation )

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

170
        'last_name' => 'qualquer' . /** @scrutinizer ignore-type */ generateRandomString(),
Loading history...
171
        "email" => "fulano" . generateRandomString() . "@fulano.com"
172
    ])->exec();
173
var_dump($create);
174
175
/**
176
 * UPDATE
177
 */
178
$update = (new Update())->from("users as u")
179
    ->where("id = ?", [$create])
180
    ->update([
181
        "email" => "fulano" . generateRandomString() . "@fulano.com"
182
    ])->exec();
183
var_dump($update);
184
185
/**
186
 * DELETE
187
 */
188
$delete = (new Delete())->from("users as u")
189
    ->where("id > ?", [56])
190
    ->delete();
191
var_dump($delete);
192
193
194
/**
195
 * Condições dinamicas(where de acordo com a necessidade)
196
 */
197
$dinamico = (new Query())->from("users as u")->select(["u.id", "u.first_name", "u.email"]);
198
199
$filtroId = 5;
200
201
if (!empty($filtroId)) {
0 ignored issues
show
The condition empty($filtroId) is always false.
Loading history...
202
    $dinamico->where("u.id <= ?", [$filtroId]);
203
}
204
var_dump($dinamico->get());
205
206
/**
207
 * Query sem query builder
208
 */
209
$stmt = Connect::getInstance()->prepare('
210
            select
211
                u.id,
212
                u.first_name,
213
                GROUP_CONCAT(distinct CONCAT_WS(";", a.id, a.street) SEPARATOR " | ") as enderecos
214
            from
215
                users u
216
            left join address a on
217
                a.user_id = u.id
218
            group by
219
                u.id
220
            limit 10 offset 0
221
        ');
222
$stmt->execute();
223
$result = $stmt->fetchAll(\PDO::FETCH_OBJ);
224
var_dump($result);
225
226
/**
227
 * Having
228
 */
229
$sql = (new Query())->from("users as u")
230
    ->select([
231
        "u.id",
232
        "count(ao.id) as qtd"
233
    ])
234
    ->join("app_orders as ao","ao.user_id = u.id")
235
    ->groupBy("u.id")
236
    ->having("count(ao.id) > ?", [1])
237
    ->get();
238
239
var_dump($sql);
240
/**
241
 * DEBUG QUERY
242
 */
243
244
$sql = (new Query())->from("users as u")
245
    ->select([
246
        "u.id",
247
        "count(ao.id) as qtd"
248
    ])
249
    ->join("app_orders as ao", "ao.user_id = u.id")
250
    ->groupBy("u.id")
251
    ->having("count(ao.id) > ?", [1])
252
    ->toSQL();
253
var_dump($sql);
254
255
256
/**
257
 * CREATE
258
 */
259
$create = (new Create())->from("users")
260
    ->create([
261
        'first_name' => 'fulano',
262
        'last_name' => 'qualquer' . generateRandomString(),
263
        "email" => "fulano" . generateRandomString() . "@fulano.com"
264
    ])->dump();
265
var_dump($create);
266
267
/**
268
 * UPDATE
269
 */
270
$update = (new Update())->from("users as u")
271
    ->where("id = ?", [$create])
272
    ->update([
273
        "email" => "fulano" . generateRandomString() . "@fulano.com"
274
    ])->dump();
275
var_dump($update);
276
277
/**
278
 * DELETE
279
 */
280
$delete = (new Delete())->from("users as u")
281
    ->where("id > ?", [56])
282
    ->dump();
283
var_dump($delete);
284
285
/**
286
 * Criar filtros de queries de forma dinamica, gerando a string dos "where" e um array com bind params
287
 */
288
289
$urlFilter = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
0 ignored issues
show
The constant FILTER_SANITIZE_FULL_SPECIAL_CHARS was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
290
291
$filtersArrReference = [];
292
293
QueryHelpers::dynamicQueryFilters($filtersArrReference, 'id >= ?', [1]);
294
295
if ($urlFilter) {
296
    QueryHelpers::dynamicQueryFilters($filtersArrReference, 'first_name like ?', ["%$urlFilter%"]);
297
}
298
299
300
$sql = (new Query())->from("users as u")
301
    ->select(['*'])
302
    ->where($filtersArrReference['queryString'], $filtersArrReference['binds'])
303
    ->first();
304
var_dump($sql);
305