Skip to content

Commit 75097b2

Browse files
committed
refactor(request): columns settings and filters
1 parent 79d15d4 commit 75097b2

File tree

1 file changed

+18
-14
lines changed

1 file changed

+18
-14
lines changed

src/VueTableRequest.php

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -117,25 +117,29 @@ private function extractColumnNames(): array
117117
*/
118118
private function filterColumns()
119119
{
120-
foreach ($this->filters as $filter) {
121-
$values = $filter['values'];
122-
$modifiers = $filter['modifiers'] ?? [];
120+
foreach ($this->columns as $name => $settings) {
121+
if (!isset($settings['value'])) {
122+
continue;
123+
}
124+
125+
$value = $settings['value'] ?? null;
126+
$modifiers = $settings['modifiers'] ?? [];
123127

124-
if (Str::contains($filter['column'], '.')) {
125-
$relationBits = explode('.', $filter['column']);
128+
if (Str::contains($name, '.')) {
129+
$relationBits = explode('.', $name);
126130

127131
$attribute = array_pop($relationBits);
128132

129133
$relation = implode('.', $relationBits);
130134

131-
$this->query->whereHas($relation, function (Builder $query) use ($modifiers, $attribute, $values) {
132-
$this->applyFilter($query, $modifiers, $attribute, $values);
135+
$this->query->whereHas($relation, function (Builder $query) use ($modifiers, $attribute, $value) {
136+
$this->applyFilter($query, $modifiers, $attribute, $value);
133137
});
134138

135139
continue;
136140
}
137141

138-
$this->applyFilter($this->query, $modifiers, $filter['column'], $values);
142+
$this->applyFilter($this->query, $modifiers, $name, $value);
139143
}
140144
}
141145

@@ -186,12 +190,12 @@ private function searchColumns()
186190
$relations = [];
187191

188192
$this->query->where(function ($query) use (&$relations) {
189-
foreach ($this->columns as $column) {
190-
$isSearchable = $column['searchable'] ?? false;
193+
foreach ($this->columns as $name => $settings) {
194+
$isSearchable = (bool)($settings['searchable'] ?? false);
191195

192-
if (isset($column['name']) && filter_var($isSearchable, FILTER_VALIDATE_BOOLEAN)) {
193-
if (Str::contains($column['name'], '.')) {
194-
$relationBits = explode('.', $column['name']);
196+
if ($isSearchable) {
197+
if (Str::contains($name, '.')) {
198+
$relationBits = explode('.', $name);
195199

196200
$attribute = array_pop($relationBits);
197201

@@ -206,7 +210,7 @@ private function searchColumns()
206210
continue;
207211
}
208212

209-
$query->orWhere($column['name'], 'LIKE', sprintf('%%%s%%', $this->search));
213+
$query->orWhere($name, 'LIKE', sprintf('%%%s%%', $this->search));
210214
}
211215
}
212216
});

0 commit comments

Comments
 (0)