|
1 | 1 | # Response using Transformer |
2 | 2 |
|
| 3 | +You'll need to install [laravel-datatables-fractal package](https://github.com/yajra/laravel-datatables-fractal) if you haven't already. |
| 4 | + |
3 | 5 | When using tranformer, all response manipulations must be done via transformer. |
4 | 6 | Thus `addColumn`, `editColumn`, `removeColumn`, `setRowAttr`, `setClassAttr`, etc... should be avoided when using fractal. |
5 | 7 |
|
| 8 | +## Closure |
| 9 | + |
| 10 | +You can pass a closure which will receive an item of the result collection and should return an array. |
| 11 | + |
6 | 12 | ```php |
7 | 13 | use DataTables; |
8 | | -use App\Transformers\UserTransformer; |
| 14 | +use App\User; |
| 15 | + |
| 16 | +Route::get('user-data', function() { |
| 17 | + $model = User::query(); |
| 18 | + |
| 19 | + return DataTables::eloquent($model) |
| 20 | + ->setTransformer(function($item){ |
| 21 | + return [ |
| 22 | + 'id' => (int) $user->id, |
| 23 | + 'name' => $user->name, |
| 24 | + 'email' => $user->email, |
| 25 | + 'created_at' => (string) $user->created_at, |
| 26 | + 'updated_at' => (string) $user->updated_at, |
| 27 | + ]; |
| 28 | + }) |
| 29 | + ->toJson(); |
| 30 | +}); |
| 31 | +``` |
| 32 | + |
| 33 | +Thus you can make use of Laravel API Resource. |
| 34 | + |
| 35 | +```php |
| 36 | +use DataTables; |
| 37 | +use App\User; |
| 38 | +use App\Http\Resources\UserResource; |
9 | 39 |
|
10 | 40 | Route::get('user-data', function() { |
11 | | - $model = App\User::query(); |
| 41 | + $model = User::query(); |
12 | 42 |
|
13 | | - return DataTables::eloquent($model) |
14 | | - ->setTransformer(new UserTransformer) |
15 | | - ->toJson(); |
| 43 | + return DataTables::eloquent($model) |
| 44 | + ->setTransformer(function($item){ |
| 45 | + return UserResource::make($item)->resolve(); |
| 46 | + }) |
| 47 | + ->toJson(); |
16 | 48 | }); |
17 | 49 | ``` |
18 | 50 |
|
19 | | -## Creating Transformer |
| 51 | + |
| 52 | +## Transformer |
| 53 | + |
| 54 | +You can use Transformer class. |
| 55 | + |
| 56 | +```php |
| 57 | +use DataTables; |
| 58 | +use App\Transformers\UserTransformer; |
| 59 | + |
| 60 | +Route::get('user-data', function() { |
| 61 | + $model = App\User::query(); |
| 62 | + |
| 63 | + return DataTables::eloquent($model) |
| 64 | + ->setTransformer(new UserTransformer) |
| 65 | + ->toJson(); |
| 66 | +}); |
| 67 | +``` |
20 | 68 |
|
21 | 69 | ### Manual Way |
22 | 70 |
|
@@ -163,4 +211,4 @@ class UserTransformer extends TransformerAbstract |
163 | 211 | return $this->collection($user->posts, new PostTransformer); |
164 | 212 | } |
165 | 213 | } |
166 | | -``` |
| 214 | +``` |
0 commit comments