Skip to content

Commit 172cd53

Browse files
authored
Merge pull request #11 from ghonijee/development
Fixing bug filter nested relation field
2 parents 2cbdb2b + 5eb294c commit 172cd53

File tree

6 files changed

+53
-16
lines changed

6 files changed

+53
-16
lines changed

.github/workflows/main.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@ jobs:
3333
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
3434

3535
steps:
36-
- name: Verify MySQL connection from host
37-
run: |
38-
sudo apt-get install -y mysql-client
39-
mysql --host 127.0.0.1 --port 33306 -uroot -ppassword -e "SHOW DATABASES"
36+
# - name: Verify MySQL connection from host
37+
# run: |
38+
# sudo apt-get install -y mysql-client
39+
# mysql --host 127.0.0.1 --port 33306 -uroot -ppassword -e "SHOW DATABASES"
4040

4141
- name: Checkout code
4242
uses: actions/checkout@v2

CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,9 @@ All notable changes to `QueryAdapter` will be documented in this file
1717

1818
## 1.0.5-Beta - 2021-11-04
1919

20-
- Bug Fixed sorted by relation data
20+
- Bug Fixed sorted by relation data
21+
22+
## 1.0.7-Beta - 2022-02-03
23+
24+
- Fixing bug filter deep relation model
25+
- Remove Add Day on Filter Date

src/Builders/FilterQuery.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,12 @@ private function isRelationFilter(Builder $query, FilterData $item)
7272
return false;
7373
}
7474

75-
if (!method_exists($query->getModel(), $item->relationMethod)) {
75+
$firstRelationship = explode('.', $item->relationMethod)[0];
76+
77+
if (!method_exists($query->getModel(), $firstRelationship)) {
7678
return false;
7779
}
7880

79-
return is_a($query->getModel()->{$item->relationMethod}(), Relation::class);
81+
return is_a($query->getModel()->{$firstRelationship}(), Relation::class);
8082
}
8183
}

src/FilterClass/QueryClass/DateFilter.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,16 @@ protected function notCondition()
4848
$this->query->where($this->filterData->field, '!=', $this->filterData->value);
4949
break;
5050
case '<':
51-
$this->query->whereDate($this->filterData->field, '>', Carbon::parse($this->filterData->value)->addDay());
51+
$this->query->whereDate($this->filterData->field, '>', Carbon::parse($this->filterData->value));
5252
break;
5353
case '<=':
54-
$this->query->whereDate($this->filterData->field, '>=', Carbon::parse($this->filterData->value)->addDay());
54+
$this->query->whereDate($this->filterData->field, '>=', Carbon::parse($this->filterData->value));
5555
break;
5656
case '>':
57-
$this->query->whereDate($this->filterData->field, '<', Carbon::parse($this->filterData->value)->addDay());
57+
$this->query->whereDate($this->filterData->field, '<', Carbon::parse($this->filterData->value));
5858
break;
5959
case '>=':
60-
$this->query->whereDate($this->filterData->field, '<=', Carbon::parse($this->filterData->value)->addDay());
60+
$this->query->whereDate($this->filterData->field, '<=', Carbon::parse($this->filterData->value));
6161
break;
6262
default:
6363
throw new Exception("Error Processing Request");
@@ -71,7 +71,7 @@ protected function orCondition()
7171
$this->query->orWhere($this->filterData->field, '=', $this->filterData->value);
7272
break;
7373
default:
74-
$this->query->orWhereDate($this->filterData->field, $this->filterData->condition, Carbon::parse($this->filterData->value)->addDay());
74+
$this->query->orWhereDate($this->filterData->field, $this->filterData->condition, Carbon::parse($this->filterData->value));
7575
break;
7676
}
7777
}
@@ -83,7 +83,7 @@ protected function andCondition()
8383
$this->query->where($this->filterData->field, '=', $this->filterData->value);
8484
break;
8585
default:
86-
$this->query->whereDate($this->filterData->field, $this->filterData->condition, Carbon::parse($this->filterData->value)->addDay());
86+
$this->query->whereDate($this->filterData->field, $this->filterData->condition, Carbon::parse($this->filterData->value));
8787
break;
8888
}
8989
}

tests/Feature/FilterTest.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
use GhoniJee\DxAdapter\Models\TestComment;
55
use GhoniJee\DxAdapter\Models\TestModel;
66
use Illuminate\Http\Request;
7+
use Illuminate\Support\Carbon;
78

89
beforeEach(function () {
910
$this->request = new Request();
@@ -119,6 +120,32 @@
119120
expect($query)->toEqual($queryExpectation);
120121
});
121122

123+
test('can filter date data with contion <', function () {
124+
$dateFilter = now()->addDays(1)->setTime(0, 0, 0)->format('Y-m-d H:i:s');
125+
$filter = ['created_at', '<', $dateFilter]; //->format('Y-m-d H:i:s')
126+
127+
$this->request->replace(['filter' => $filter]);
128+
129+
$query = DxAdapter::load(TestModel::query(), $this->request)->get();
130+
$queryExpectation = TestModel::whereDate('created_at', '<', $dateFilter)->get();
131+
132+
expect($query)->toEqual($queryExpectation);
133+
expect($query->count())->toEqual($queryExpectation->count());
134+
});
135+
136+
test('can filter date data with contion <=', function () {
137+
$dateFilter = now()->addDays(1)->format('Y-m-d');
138+
$filter = ['created_at', '<=', $dateFilter];
139+
140+
$this->request->replace(['filter' => $filter]);
141+
142+
$query = DxAdapter::load(TestModel::query(), $this->request)->get();
143+
$queryExpectation = TestModel::whereDate('created_at', '<=', $dateFilter)->get();
144+
145+
expect($query)->toEqual($queryExpectation);
146+
expect($query->count())->toEqual($queryExpectation->count());
147+
});
148+
122149
test('can filter boolean data', function () {
123150
$filter = ['active', '=', true];
124151

tests/TestCase.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,21 +79,24 @@ protected function createTestModel()
7979
'last_name' => "Yunus",
8080
'address' => "Jl. Pendidikan",
8181
'gender' => "L",
82-
'active' => true
82+
'active' => true,
83+
'created_at' => now()->addDays(2)
8384
],
8485
[
8586
'name' => "Ahmad",
8687
'last_name' => "Ghoni",
8788
'address' => "Jl. Pendidikan 2",
8889
'gender' => "L",
89-
'active' => false
90+
'active' => false,
91+
'created_at' => now()->addDays(1)
9092
],
9193
[
9294
'name' => "Yunus",
9395
'last_name' => "Ghoni",
9496
'address' => "Jl. Pendidikan 3",
9597
'gender' => "L",
96-
'active' => false
98+
'active' => false,
99+
'created_at' => now()
97100
]
98101
];
99102

0 commit comments

Comments
 (0)