clagiordano/weblibs-dbabstraction

数据库和ORM模块的抽象库

v1.0.8 2016-08-25 20:15 UTC

This package is auto-updated.

Last update: 2024-09-14 08:40:44 UTC


README

BuildStatus License

weblibs-dbabstraction

weblibs-dbabstraction 是一个简单且轻量级的数据库和ORM模块的抽象库。

SensioLabsInsight

为什么使用 weblibs-dbabstraction ?

该项目的目的是提供一个简单且轻量级的替代方案,而不是像 Doctrine 这样的更大、更复杂的项目。

安装

推荐通过 Composer 安装 weblibs-dbabstraction。

composer require clagiordano/weblibs-dbabstraction

主要组件的描述

适配器描述

是一个持久层,用于与数据库或其他后端交互。适配器类必须实现 DatabaseAdapterInterface 以与其他组件兼容。
默认适配器是已定义的 PDOAdapter,它简化了对 PDO 对象和相关方法的访问。
可以实施其他特定适配器以轻松访问其他后端。

适配器使用

new PDOAdapter(
    $dbHost,
    $dbUser,
    $dbPassword,
    $dbName,
    $dbDriver,
    $dbCharset,
    $isPersistent
);

请参阅 PDOAdapterTest 类(phpunit 测试类)以获取测试文件夹中的完整使用示例。

实体描述

实体是一个对象,它通过字段数组动态公开属性。它是一个简单的类,定义了魔法方法(__set、__get ...)。
实体自动由 mapper 类用于操作,并且可以用来获取和设置其属性。
有关更多详细信息,请参阅测试数据文件夹中的 SampleEntity 类。

实体使用

实体类必须继承 AbstractEntity,如下所示

/**
 * Class SampleEntity
 */
class SampleEntity extends AbstractEntity
{
}

然后可以

$entityClass->property = "value";
echo $entityClass->property;

映射器描述

映射器是 EntityAdapter 对象之间的粘合剂,它公开高级方法来使用和持久化数据。
映射器类必须继承 AbstractMapper

/**
 * Class SampleMapper
 */
class SampleMapper extends AbstractMapper
{

然后必须声明两个受保护的属性以连接数据库表以进行持久化和相关的实体类

protected $entityTable = 'sample_table';
protected $entityClass = 'SampleEntity';

因此必须实现抽象方法 createEntity 以正确映射表字段和所需实体属性

protected function createEntity(array $fields)
{
    return new SampleEntity(
        [
            'id' => $fields['id'],
            'code' => $fields['code'],
            'brand' => $fields['brand'],
            'model' => $fields['model'],
            'description' => $fields['description']
        ]
    );
}

如有必要,您还可以定义其他方法或覆盖现有方法,如 insert、update、delete 等,以修改其行为。

映射器使用

为了提高控制和安全性,可以覆盖 AbstractMapper 的方法

/**
 * Sample overrided insert method
 *
 * @param SampleEntity $entity
 * @return mixed
 */
public function insert($entity)
{
    if (!$entity instanceof SampleEntity) {
        throw new \InvalidArgumentException(
            __METHOD__ . ": Invalid entity type."
        );
    }

    return $this->adapter->insert($this->entityTable, $entity->toArray());
}

如您所见,此覆盖方法需要显式提供一个 SampleEntity 实例才能工作,您也可以执行验证或额外的参数格式化/清理或您想要的任何操作。

法律

版权 (C) Claudio Giordano claudio.giordano@autistici.org