PHPackages                             akbarali/data-object - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. akbarali/data-object

ActiveLibrary

akbarali/data-object
====================

Data Object PHP Laravel

2.8.7(1y ago)33421[1 PRs](https://github.com/akbarali1/data-object/pulls)4MITPHPPHP &gt;=8.0

Since Jan 31Pushed 1y ago1 watchersCompare

[ Source](https://github.com/akbarali1/data-object)[ Packagist](https://packagist.org/packages/akbarali/data-object)[ RSS](/packages/akbarali-data-object/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (2)Versions (35)Used By (4)

INSTALL
=======

[](#install)

```
composer require akbarali/data-object

```

TODO
====

[](#todo)

Done ?NameVersion✅Add `createProperty`2.5✅Add command to create `DataObject` via `Eloquent Model` or `Database Tables`2.6.5⬜Add command to create `DataObject` via PHP `Array`In the future⬜Add creation without converting the `Eloquent Model` to an array.In the futureUSAGE
=====

[](#usage)

Array create Data Object

```
$object = DataObj::createFromArray([
    'key1' => 'value1',
    'key2' => 'value2',
]);
```

Laravel model create Data Object

```
$model = User::query()->find(1);
$object = DataObj::createFromEloquentModel($model);
```

Json create Data Object

```
$object = DataObj::createFromJson('{"key1":"value1","key2":"value2"}');
```

Laravel Relation BelongsTo or HasOne
====================================

[](#laravel-relation-belongsto-or-hasone)

Create `StoreData`

```
class StoreData extends \Akbarali\DataObject\DataObjectBase
{
    public ?string $id;
    public ?int    $user_id;
    public ?string $name;
    public ?string $phone;
    public ?string $address;
    public ?string $description = "Default Description";
    public ?string $image;
    public ?bool   $status;
    public ?string $created_at;

    public UserData $user;
}
```

`UserData`

```
class UserData extends \Akbarali\DataObject\DataObjectBase
{
    public ?int    $id;
    public ?string $name;
    public ?string $email;
    public ?string $avatar;
    public ?string $phone;
    public ?string $birth_date;
    public ?bool   $status;
    public ?string $created_at;

    public RoleData $role;
}
```

`RoleData`

```
class RoleData extends \Akbarali\DataObject\DataObjectBase
{
    public int    $id;
    public string $name;
    public string $slug;
    public string $created_at;
}
```

```
$store = Store::query()->with(['user.role'])->find(1);
$storeData = StoreData::createFromEloquentModel($store);
```

Note: If you want to turn the relation into a DataObject, you should open a realton to the model and get that relation with. Then U is also converted to data object

Laravel Relation HasMany
========================

[](#laravel-relation-hasmany)

`ProductData`

```
ProductData extends \Akbarali\DataObject\DataObjectBase
{
    public ?int    $id;
    public ?string $name;
    public ?string $description;
    public ?string $image;
    public ?bool   $status;
    public ?string $created_at;
}
```

`StoreData`

```
StoreData extends \Akbarali\DataObject\DataObjectBase
{
    public ?int    $id;
    public ?string $name;
    public ?string $description;
    public ?string $image;
    public ?bool   $status;
    public ?string $created_at;

    public array|ProductData $products;
}
```

```
$store = Store::query()->with(['products'])->find(1);
$storeData = StoreData::createFromEloquentModel($store);
//or
$storeData = StoreData::fromModel($store);
```

DataObject To array
===================

[](#dataobject-to-array)

```
$storeData->toArray();
//or
$storeData->all(true);
```

DataObjec To SnakCase
=====================

[](#dataobjec-to-snakcase)

```
$storeData->toSnakeCase();
```

In a model, `created_at` is usually `use Illuminate\Support\Carbon;`. You can also pass `created_at` to `Carbon`.

```
use Illuminate\Support\Carbon;

ProductData extends \Akbarali\DataObject\DataObjectBase
{
    public int    $id;
    public string $name;
    public string $description;
    public string $image;
    public bool   $status;
    public Carbon $created_at;
}
```

2.0 version
===========

[](#20-version)

Supported Readonly Properties

```
class ClientData extends \Akbarali\DataObject\DataObjectBase
{
    public readonly int $id;
    public string       $full_name;
}
```

```
$object = DataObj::createFromArray([
    'id'        => 1,
    'full_name' => 'Akbarali',
]);
$object->id = 2;
```

**Error: Cannot modify readonly property App\\DataObjects\\HistoryData::$id**

2.2 version
===========

[](#22-version)

Adding: `fromModel` `fromJson` `fromArray`

Add static function `arrayToClassProperty`

```
class ClientData extends \Akbarali\DataObject\DataObjectBase
{
    public int    $id;
    public string $full_name;
}
```

```
$object = ClientData::arrayToClassProperty([
    'id'        => 1,
    'full_name' => 'Akbarali',
]);
```

Return string: `public readonly int $id;public string $full_name;`

2.5 version
===========

[](#25-version)

`createProperty` method added to create a property return string and bug fix `arrayToClassProperty`

2.6.2 version
=============

[](#262-version)

Add command create DataObject

Install

Add `DataObjectProvider` to `/config/app.php` `providers`

```
'providers' => [
...
\Akbarali\DataObject\DataObjectProvider::class,
]
```

DataObject create console command

```
 php artisan do:create

```

Models Create DataObject

```
 php artisan do:create models

```

Tables Create DataObject

```
 php artisan do:create tables

```

Search Table and create DataObject

```
 php artisan do:create tableSearch

```

Search Model and create DataObject

```
 php artisan do:create modelSearch

```

2.6.5 version
=============

[](#265-version)

Add `--model` and `--table` options to create DataObject

```
php artisan do:create --model="App\Models\QQB\User"

```

```
php artisan do:create --table="users"

```

2.8.2 version
=============

[](#282-version)

Add `toArrayForgetProperty` add new method.

###  Health Score

35

—

LowBetter than 79% of packages

Maintenance42

Moderate activity, may be stable

Popularity17

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity58

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~11 days

Total

33

Last Release

460d ago

Major Versions

1.5 → 2.02024-03-07

### Community

Maintainers

![](https://www.gravatar.com/avatar/b3228f32e213a2e306db99f2526c4ec31bac09c86e360db37bde696689f962a2?d=identicon)[akbarali](/maintainers/akbarali)

---

Top Contributors

[![akbarali1](https://avatars.githubusercontent.com/u/39323182?v=4)](https://github.com/akbarali1 "akbarali1 (73 commits)")

---

Tags

phplaravel

### Embed Badge

![Health badge](/badges/akbarali-data-object/health.svg)

```
[![Health](https://phpackages.com/badges/akbarali-data-object/health.svg)](https://phpackages.com/packages/akbarali-data-object)
```

###  Alternatives

[tomatophp/filament-users

Manage your users with a highly customizable user resource for FilamentPHP with integration of filament-shield and filament-impersonate

90102.0k7](/packages/tomatophp-filament-users)[octw/aramex

A Library to integrate with Aramex APIs

2925.2k](/packages/octw-aramex)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
