PHP 8.1+ 智能实体,具有数据恢复功能

v0.1.12 2023-12-25 08:43 UTC

This package is auto-updated.

Last update: 2024-09-25 11:52:13 UTC


README

Latest Stable Version Build Status Codecov

Composite Entity 是一个为 PHP 8.1+ 设计的轻量级类,旨在高效且智能地处理数据。它专注于数据的序列化和反序列化,对数据库管理非常有帮助。

特性

  • 将数据库行转换为严格类型对象,反之亦然。
  • 简化数据库交互。

概述

要求

  • PHP 8.1 或更高版本。

安装

使用 Composer 安装:

$ composer require compositephp/entity

支持的列类型

Composite Entity 支持广泛的数据类型

  • 基本类型:字符串、整数、浮点数、布尔值、数组。
  • 复杂类型:对象(stdClass)、DateTime/DateTimeImmutable、枚举。
  • 高级类型:实体、实体列表或映射、集合(例如,Doctrine Collection)、实现 Composite\DB\Entity\CastableInterface 的自定义类。

快速示例

use Composite\Entity\AbstractEntity;

class User extends AbstractEntity
{
    public function __construct(
        public readonly int $id,
        public string $email,
        public ?string $name = null,
        public bool $is_test = false,
        public array $languages = [],
        public Status $status = Status::ACTIVE,
        public readonly \DateTimeImmutable $created_at = new \DateTimeImmutable(),
    ) {}
}

enum Status
{
    case ACTIVE;
    case BLOCKED;
}

序列化示例

$user = new User(
    id: 123,
    email: 'john@example.com',
    name: 'John',
    is_test: false,
    languages: ['en', 'fr'],
    status: Status::BLOCKED,
);

var_export($user->toArray());

//will output
array (
  'id' => 123,
  'email' => 'user@example.com',
  'name' => 'John',
  'is_test' => false,
  'languages' => '["en","fr"]',
  'status' => 'BLOCKED',
  'created_at' => '2022-01-01 11:22:33.000000',
)

您还可以从数组反序列化(恢复)实体

$user = User::fromArray([
  'id' => 123,
  'email' => 'user@example.com',
  'name' => 'John',
  'is_test' => false,
  'languages' => '["en","fr"]',
  'status' => 'BLOCKED',
  'created_at' => '2022-01-01 11:22:33.000000',
]);

就这么多。不需要特殊的getter或setter,不需要额外的“行为”或额外的代码层。Composite Entity 自动处理所有操作,确保无缝的数据转换。

高级使用

自定义数据恢复

为了定制性能,实现自己的数据恢复器

  1. 创建一个实现 Composite\Entity\HydratorInterface 的类。
  2. Composite\Entity\Attributes\Hydrator 属性添加到您的实体类中。

有用的属性

  • Composite\Entity\Attributes\SkipSerialization

    排除数据恢复中的属性。

  • Composite\Entity\Attributes\ListOf

    在属性内定义实体列表。

    示例

    use Composite\Entity\AbstractEntity;
    use Composite\Entity\Attributes\ListOf;
    
    class User extends AbstractEntity
    {
        public readonly int $id;
        
        public function __construct(
            public string $name,
            #[ListOf(Setting::class)]
            public array $settings = [],
        ) {}
    }
    
    class Setting extends AbstractEntity
    {
        public function __construct(
            public readonly string $name,
            public bool $isActive,
        ) {}
    }

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 LICENSE。由 Composite PHP 维护。