diff --git a/.gitignore b/.gitignore index 46cefda..3735ba9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ build composer.lock -docs vendor coverage .phpunit.result.cache diff --git a/composer.json b/composer.json index 169c18f..20c4ec6 100644 --- a/composer.json +++ b/composer.json @@ -19,10 +19,10 @@ ], "require": { "php": "^7.4|^8.0", - "laravel/framework": "^8.0", "ext-pdo": "*" }, "require-dev": { + "laravel/framework": "^8.0", "ergebnis/phpstan-rules": "^0.15.3", "pestphp/pest": "^1.20.0", "phpstan/phpstan": "^0.12.99", diff --git a/docs/id/_index.md b/docs/id/_index.md new file mode 100644 index 0000000..fcf0fb5 --- /dev/null +++ b/docs/id/_index.md @@ -0,0 +1,6 @@ +--- +title: v1 +slogan: Membuat query berdasarkan Request yang dikirim. +githubUrl: https://github.com/ghonijee/laravel-query-adapter +branch: master +--- diff --git a/docs/id/introduction.md b/docs/id/introduction.md new file mode 100644 index 0000000..858f586 --- /dev/null +++ b/docs/id/introduction.md @@ -0,0 +1,103 @@ +--- +title: Pengenalan +weight: 1 +--- + + +Package ini dibuat untuk memudahkan proses mendapatkan data dengan menggunakan filter, sort, atau select berdasarkan request data yang dikirimkan. Package ini secara khusus diciptakan untuk memenuhi kebutuhan integrasi antara Framework [Laravel](https://laravel.com) dengan [Data Grid by DevExpress](https://js.devexpress.com/Overview/DataGrid/). Namun secara umum package ini dapat digunakan meskipun tanpa menggunakan [Data Grid by DevExpress](https://js.devexpress.com/Overview/DataGrid/). + +Package `QueryAdapter` ini juga mengimplementasikan Laravel default Eloquent builder. Ini membuat anda dapat menggunakan fungsi-fungsi yang ada di Eloquent dapat anda gunakan juga menggunakan package ini. + + +## Penggunaan Dasar + +Package ini dapat digunakan dengan beberapa opsi, bisa menggunakan Facade `QueryBuilder` atau langsung menggunakan Class `DxAdapter`. + +### Jika menggunakan model langsung + +```php +use GhoniJee\DxAdapter\QueryAdapter; + +$data = QueryAdapter::for(User::class)->get() +``` +bisa juga dengan memanggil class `DxAdapter`. +```php +use GhoniJee\DxAdapter\DxAdapter; + +$data = DxAdapter::for(User::class)->get() +``` + +### Jika menggunakan query atau instance model yang sudah dibuat sebelumnya +```php +use GhoniJee\DxAdapter\QueryAdapter; + +$qeury = User::query(); +$data = QueryAdapter::load($query)->get() +``` +bisa juga dengan memanggil class `DxAdapter`. +```php +use GhoniJee\DxAdapter\DxAdapter; + +$qeury = User::query(); +$data = DxAdapter::load($query)->get() +``` + +### Membuat query untuk filter data berdasarkan request: `/users?filter=["name","contains","jhon"]`: + + + +```php + +use GhoniJee\DxAdapter\QueryAdapter; + + +$users = QueryAdapter::for(User::class)->get(); + +// semua `User` yang memiliki nama berisi jhon akan didapatkan datanya. + +``` + +[Baca selengkapnya untuk fitur filter]() + + +### Membuat query untuk sortBy berdasarkan request:: `/users?sort=["desc"=>false, "selector"=>"name"]`: + +```php + +use GhoniJee\DxAdapter\QueryAdapter; + + +$users = QueryAdapter::for(User::class)->get(); + +// mendapatkan data semua user sorted by ascending name + +``` + + + +[Baca selengkapnya terkait fitur sorting](https://docs.spatie.be/laravel-query-builder/v2/features/sorting/) + + +### Membuat query untuk mendapatkan data field tertentu `/users?select=["id","email"]` + + + +```php + +use GhoniJee\DxAdapter\QueryAdapter; + +$users = QueryAdapter::for(User::class)->get(); + +// mendapatkan data user hanya untuk field id & email + +``` + + + +[Baca selengkapnya untuk selected data]() + + + +## Terimakasih + - [Team Spatie](https://spatie.be/), karena package ini dibuat berdasarkan refrensi package [Laravel Query Builder](https://spatie.be/docs/laravel-query-builder/v3/introduction). + - [Alfredo Eka WIbowo](https://github.com/edo-floo) yang sudah membuat base DxAdapter. \ No newline at end of file diff --git a/src/Actions/SerializeData.php b/src/Actions/SerializeData.php index b749755..1e982df 100644 --- a/src/Actions/SerializeData.php +++ b/src/Actions/SerializeData.php @@ -6,7 +6,7 @@ trait SerializeData { protected function serializeData(string $key): array { - if (is_string($this->{$key})) { + if (is_string($this->request->{$key})) { return json_decode($this->replaceSingleQuote($key)); } diff --git a/tests/Feature/FilterTest.php b/tests/Feature/FilterTest.php index 43631e8..5e5017e 100644 --- a/tests/Feature/FilterTest.php +++ b/tests/Feature/FilterTest.php @@ -245,3 +245,20 @@ expect($queryBuilder)->toEqual($expected); }); + + +test('can filter with string params', function () { + $filter = [['comments.comment', 'contains', 'test'], 'and', [['active', '=', 0], 'or', ['active', '=', 1]]]; + $this->request->replace(['filter' => json_encode($filter)]); + + $query = TestModel::query(); + $queryBuilder = DxAdapter::load($query, $this->request)->toSql(); + $expected = TestModel::whereHas('comments', function ($queryComment) { + $queryComment->where('comments.comment', 'like', 'ahmad'); + })->where(function ($q) { + $q->where('active', 0); + $q->orWhere('active', 1); + })->toSql(); + + expect($queryBuilder)->toEqual($expected); +});