Skip to content

Commit

Permalink
Merge pull request #2 from ghonijee/hotfix/serialize-data-string-params
Browse files Browse the repository at this point in the history
Fixing bug serialize data string params
  • Loading branch information
ghonijee authored Nov 2, 2021
2 parents 0839037 + c978ef2 commit 396910e
Show file tree
Hide file tree
Showing 6 changed files with 128 additions and 3 deletions.
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
build
composer.lock
docs
vendor
coverage
.phpunit.result.cache
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
6 changes: 6 additions & 0 deletions docs/id/_index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
title: v1
slogan: Membuat query berdasarkan Request yang dikirim.
githubUrl: https://github.com/ghonijee/laravel-query-adapter
branch: master
---
103 changes: 103 additions & 0 deletions docs/id/introduction.md
Original file line number Diff line number Diff line change
@@ -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.
2 changes: 1 addition & 1 deletion src/Actions/SerializeData.php
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}

Expand Down
17 changes: 17 additions & 0 deletions tests/Feature/FilterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
});

0 comments on commit 396910e

Please sign in to comment.