akbarali/data-object

数据对象 PHP Laravel

2.7.2 2024-04-22 11:47 UTC

This package is auto-updated.

Last update: 2024-09-22 12:40:09 UTC


README

composer require akbarali/data-object

待办事项

使用说明

创建数据对象数组

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

Laravel 模型创建数据对象

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

JSON 创建数据对象

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

Laravel 关联 BelongsTo 或 HasOne

创建 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);

注意:如果您想将关系转换为 DataObject,您应该对模型打开关系并使用该关系获取。然后 U 也会转换为数据对象

Laravel 关联 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);

数据对象转换为数组

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

数据对象转换为下划线命名法

$storeData->toSnakeCase();

在模型中,created_at 通常使用 use Illuminate\Support\Carbon;。您也可以将 created_at 传递给 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 版本

支持的只读属性

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;

错误:无法修改只读属性 App\DataObjects\HistoryData::$id

2.2 版本

新增:fromModel fromJson fromArray

添加静态函数 arrayToClassProperty

class ClientData extends \Akbarali\DataObject\DataObjectBase
{
    public int    $id;
    public string $full_name;
}
$object = ClientData::arrayToClassProperty([
    'id'        => 1,
    'full_name' => 'Akbarali',
]); 

返回字符串:public readonly int $id;public string $full_name;

2.5 版本

添加了 createProperty 方法来创建属性,并修复了 arrayToClassProperty 的错误

2.6.2 版本

添加创建数据对象的命令

安装

DataObjectProvider 添加到 /config/app.phpproviders

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

数据对象创建控制台命令

 php artisan do:create

模型创建数据对象

 php artisan do:create models

表创建数据对象

 php artisan do:create tables

搜索表并创建数据对象

 php artisan do:create tableSearch

搜索模型并创建数据对象

 php artisan do:create modelSearch

2.6.5 版本

添加 --model--table 选项以创建数据对象

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