akbarali / data-object
数据对象 PHP Laravel
2.7.2
2024-04-22 11:47 UTC
Requires
- php: >=8.0
- ext-json: *
- laravel/framework: ^9.0|^10.0|^11.0
Requires (Dev)
- roave/security-advisories: dev-latest
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.php
的 providers
'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"