Skip to content

Commit 07fa244

Browse files
committed
fix:增加搜索字段过滤
1 parent a98cbae commit 07fa244

File tree

2 files changed

+75
-43
lines changed

2 files changed

+75
-43
lines changed

src/SearchTrait.php

Lines changed: 46 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -57,55 +57,68 @@ public function scopeWhereEndsWith($query, $column, $value, $boolean = 'and')
5757
*/
5858
public function scopeSearch($query, $params)
5959
{
60-
if (is_array($params)) {
61-
foreach ($params as $key => $_param) {
62-
$param = [];
63-
if (is_array($_param) && array_has($_param, 'column') && array_has($_param, 'value')) {
64-
$param['column'] = array_get($_param, 'column', $key);
65-
$param['operator'] = array_get($_param, 'operator', '=');
66-
$param['value'] = array_get($_param, 'value', null);
60+
$searchable = $this->getSearchable();
6761

68-
} else {
69-
if ($_param == null) {
70-
continue;
71-
}
62+
$new_params = [];
7263

73-
if (stripos(':', $key) !== false) {
74-
$arr = explode(':', $key);
75-
$param['column'] = $arr[0];
76-
$param['operator'] = isset($arr[1]) ? $arr[0] : '=';
77-
} else {
78-
$param['column'] = $key;
79-
$param['operator'] = '=';
80-
}
64+
foreach ($params as $key => $_param) {
65+
$param = [];
66+
if (is_array($_param)) {
67+
$param['column'] = array_get($_param, 'column', $key);
68+
$param['operator'] = array_get($_param, 'operator', '=');
69+
$param['value'] = array_get($_param, 'value', null);
8170

82-
$param['value'] = $_param;
71+
} else {
72+
if ($_param == null) {
73+
continue;
8374
}
75+
$param['column'] = $key;
76+
$param['operator'] = '=';
77+
$param['value'] = $_param;
78+
}
8479

85-
if ($param['value'] == null) {
86-
continue;
80+
if ($param['value'] == null) {
81+
continue;
82+
}
83+
84+
$new_params[$param['column']] = $param;
85+
}
86+
87+
$params = [];
88+
if ($searchable) {
89+
foreach ($searchable as $search) {
90+
if (isset($new_params[$search])) {
91+
$params[] = $new_params[$search];
8792
}
93+
}
94+
} else {
95+
$params = $new_params;
96+
unset($new_params);
97+
}
98+
99+
if (is_array($params)) {
100+
foreach ($params as $key => $param) {
88101

89102
switch (strtolower($param['operator'])) {
90103
case 'between':
91104
$query->whereBetween($param['column'], $param['value']);
92105
break;
93-
case 'not between':
106+
case 'not_between':
94107
$query->whereNotBetween($param['column'], $param['value']);
95108
break;
96-
case 'is null':
109+
case 'is_null':
97110
$query->whereNull($param['column']);
98111
break;
99-
case 'is not null':
112+
case 'is_not_null':
100113
$query->whereNotNull($param['column']);
101114
break;
102-
case 'like all':
115+
case 'like_all':
103116
$query->whereLike($param['column'], $param['value']);
104117
break;
105-
case 'begin with':
118+
case 'ilike':
106119
$query->whereBeginsWith($param['column'], $param['value']);
107120
break;
108-
case 'end with':
121+
case 'rlike':
109122
$query->whereEndsWith($param['column'], $param['value']);
110123
break;
111124
case 'in':
@@ -169,4 +182,9 @@ private function checkValueIsNull(array $params)
169182

170183
return true;
171184
}
185+
186+
public function getSearchable()
187+
{
188+
return [];
189+
}
172190
}

src/SortOrderTrait.php

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,14 @@ trait SortOrderTrait
1010

1111
public $sortOrderDesc = 'descend';
1212

13+
public function getSortOrderAsc() {
14+
return $this->sortOrderAsc;
15+
}
16+
17+
public function getSortOrderDesc() {
18+
return $this->sortOrderDesc;
19+
}
20+
1321
/**
1422
* 排序
1523
*
@@ -22,7 +30,7 @@ public function scopeSortOrder($query, $sort)
2230
{
2331
$sort = array_wrap($sort);
2432

25-
$sortable = $this->getSortable();
33+
$sortable = $this->parseSortable();
2634
if (!empty($sort)) {
2735
$column = array_get($sort, 'column');
2836
if (array_get($sort, 'order')) {
@@ -36,7 +44,7 @@ public function scopeSortOrder($query, $sort)
3644
}
3745
} else {
3846
$column = head(array_keys($sortable));
39-
$order = $this->formatSort(array_get($sortable, $column, $this->sortOrderAsc));
47+
$order = $this->formatSort(array_get($sortable, $column, $this->getSortOrderAsc()));
4048

4149
$query->orderBy($column, $order);
4250
}
@@ -46,16 +54,22 @@ public function scopeSortOrder($query, $sort)
4654

4755
public function getSortable()
4856
{
49-
if (empty($this->sortable)) {
50-
return [$this->getKeyName() => $this->sortOrderDesc];
57+
return [
58+
];
59+
}
60+
61+
public function parseSortable()
62+
{
63+
if (empty($this->getSortable())) {
64+
return [$this->getKeyName() => $this->getSortOrderDesc()];
5165
}
5266

5367
$sortable = [];
54-
foreach ($this->sortable as $key => $value) {
68+
foreach ($this->getSortable() as $key => $value) {
5569
if (is_int($key)) {
56-
$sortable[$value] = $this->sortOrderDesc;
70+
$sortable[$value] = $this->getSortOrderDesc();
5771
} else {
58-
$sortable[$key] = ($value == $this->sortOrderAsc ? $this->sortOrderAsc : $this->sortOrderDesc);
72+
$sortable[$key] = ($value == $this->getSortOrderAsc() ? $this->getSortOrderAsc() : $this->getSortOrderDesc());
5973
}
6074
}
6175

@@ -66,13 +80,13 @@ public function setSortable($column, $order)
6680
{
6781
$sortable = [];
6882
if (is_string($column)) {
69-
$sortable[$column] = ($order == $this->sortOrderAsc ? $this->sortOrderAsc : $this->sortOrderDesc);
83+
$sortable[$column] = ($order == $this->getSortOrderAsc() ? $this->getSortOrderAsc() : $this->getSortOrderDesc());
7084
} else if(is_array($column)) {
7185
foreach ($column as $key => $value) {
7286
if (is_int($key)) {
73-
$sortable[$value] = $this->sortOrderDesc;
87+
$sortable[$value] = $this->getSortOrderDesc();
7488
} else {
75-
$sortable[$key] = ($value == $this->sortOrderAsc ? $this->sortOrderAsc : $this->sortOrderDesc);
89+
$sortable[$key] = ($value == $this->getSortOrderAsc() ? $this->getSortOrderAsc() : $this->getSortOrderDesc());
7690
}
7791
}
7892
}
@@ -85,25 +99,25 @@ public function addSortable($column, $order)
8599
{
86100
$sortable = [];
87101
if (is_string($column)) {
88-
$sortable[$column] = ($order == $this->sortOrderAsc ? $this->sortOrderAsc : $this->sortOrderDesc);
102+
$sortable[$column] = ($order == $this->getSortOrderAsc() ? $this->getSortOrderAsc() : $this->getSortOrderDesc());
89103
} else if(is_array($column)) {
90104
foreach ($column as $key => $value) {
91105
if (is_int($key)) {
92-
$sortable[$value] = $this->sortOrderDesc;
106+
$sortable[$value] = $this->getSortOrderDesc();
93107
} else {
94-
$sortable[$key] = ($value == $this->sortOrderAsc ? $this->sortOrderAsc : $this->sortOrderDesc);
108+
$sortable[$key] = ($value == $this->getSortOrderAsc() ? $this->getSortOrderAsc() : $this->getSortOrderDesc());
95109
}
96110
}
97111
}
98112

99-
$this->sortable = array_merge($this->sortable, $sortable);
113+
$this->sortable = array_merge($this->getSortable(), $sortable);
100114

101115
return $this;
102116
}
103117

104118
private function formatSort($sort)
105119
{
106-
if ($sort == $this->sortOrderAsc) {
120+
if ($sort == $this->getSortOrderAsc()) {
107121
return 'asc';
108122
}
109123

0 commit comments

Comments
 (0)