-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSelect.php
102 lines (83 loc) · 2.11 KB
/
Select.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
namespace ModernPDO\Actions;
use ModernPDO\Traits\ColumnsTrait;
use ModernPDO\Traits\JoinsTrait;
use ModernPDO\Traits\LimitTrait;
use ModernPDO\Traits\OrderByTrait;
use ModernPDO\Traits\WhereTrait;
/**
* Class for getting rows from a table.
*/
class Select extends Action
{
use ColumnsTrait;
use JoinsTrait;
use LimitTrait;
use OrderByTrait;
use WhereTrait;
/**
* Returns base query.
*/
protected function buildQuery(): string
{
$escaper = $this->mpdo->escaper();
$query = 'SELECT ' . $this->columnsQuery($escaper) . ' FROM ' . $escaper->table($this->table);
if ($this->joinsTable !== '') {
$query .= ' ' . $this->joinsQuery($escaper);
}
if (!empty($this->where)) {
$query .= ' ' . $this->whereQuery($escaper);
}
if ($this->orderByColumn !== '') {
$query .= ' ' . $this->orderByQuery($escaper);
}
if ($this->limitCount > 0) {
$query .= ' ' . $this->limitQuery($escaper);
}
return $query;
}
/**
* Returns placeholders.
*
* @return mixed[]
*/
protected function getPlaceholders(): array
{
return array_merge(
$this->columnsPlaceholders(),
$this->joinsPlaceholders(),
$this->wherePlaceholders(),
$this->orderByPlaceholders(),
);
}
/**
* Returns all or few rows from table.
*
* @return list<array<string, mixed>>
*/
public function rows(): array
{
$this->query = $this->buildQuery();
return $this->exec()->fetchAll();
}
/**
* Returns one row from table.
*
* @return array<string, mixed>
*/
public function row(): array
{
$this->limit(1);
$this->query = $this->buildQuery();
return $this->exec()->fetch();
}
/**
* Returns one row cell from table.
*/
public function cell(int $column = 0): mixed
{
$this->limit(1);
$this->query = $this->buildQuery();
return $this->exec()->fetchColumn($column);
}
}