stratadox/hydrate

v0.2 2018-01-21 21:58 UTC

This package is auto-updated.

Last update: 2024-09-29 03:47:11 UTC


README

Build Status

Hydrate 模块包含从任意数据中活化对象所需的所有内容。这些数据可能来自 SQL 数据库、文档存储、Web API 或其他任何来源。

安装

使用 composer 安装

composer require stratadox/hydrate

基本用法

  1. 使用映射器创建一个活化器,可以从输入数据构建您的领域模型
$hydrator = Mapper::forThe(Book::class)
   ->property('title', Has::one(Title::class)->with('title'))
   ->property('isbn', Has::one(Isbn::class)->with('code', In::key('id'))
   ->property('author', Has::one(Author::class)
       ->with('firstName', In::key('author_first_name'))
       ->with('lastName', In::key('author_last_name'))
   )
   ->property('contents')
   ->hydrator();
  1. 从数据源加载数据
$books = [];
$result = $database->query("SELECT * FROM `book`");
while ($data = $result->row) {
    $books[] = $hydrator->fromArray($data);
}
  1. 完成!您的对象(在本例中是一批书籍),现在已作为完整的对象图活化,每个都包含其相关对象,如标题、ISBN 和作者。

实际上,上面的映射将把如下查询结果转换为以下对象结构

+------------+---------------+-------------------+------------------+----------------------------+
| id         | title         | author_first_name | author_last_name | contents                   |
+------------+---------------+-------------------+------------------+----------------------------+
| 1234567890 | Book Title    | John              | Doe              | Lorem ipsum dolor sit amed |
| 9876543210 | Foo, bar, baz | Jackie            | Chan             | Lorem ipsum dolor sit amed |
+------------+---------------+-------------------+------------------+----------------------------+

...

array(2) {
  [0] => object(Book)#1 (4) {
    ["title"] => object(Title)#2 (1) {
      ["title"] => string(10) "Book Title"
    }
    ["isbn"] => object(Isbn)#3 (1) {
      ["code"] => string(10) "1234567890"
    }
    ["author"] => object(Author)#4 (2) {
      ["firstName"] => string(4) "John"
      ["lastName"] => string(3) "Doe"
    }
    ["contents"] => string(26) "Lorem ipsum dolor sit amed"
  }
  [1] => object(Book)#1 (4) {
    ["title"] => object(Title)#2 (1) {
      ["title"] => string(10) "Foo, bar, baz"
    }
    ["isbn"] => object(Isbn)#3 (1) {
      ["code"] => string(10) "9876543210"
    }
    ["author"] => object(Author)#4 (2) {
      ["firstName"] => string(4) "Jackie"
      ["lastName"] => string(3) "Chan"
    }
    ["contents"] => string(26) "Lorem ipsum dolor sit amed"
  }
}

功能

上面的例子只是冰山一角的可能性。 Hydrate 包提供了许多(通常是独特的)功能,例如

  • 使用结果集的多个键生成值对象
  • 懒加载(和额外懒加载)关系,即使它们在数组或不可变集合中!
  • 在运行时决定具体的实现(“单表继承”)
  • 通过调用闭包来加载属性值,完全控制数据解释。
  • ...等等!

子包

Hydrate 包不包含源代码(除了某些集成测试外)。相反,它组合了几个子包。以下列出了这些包。

Hydrator

产生对象,包含其属性中的数据,而无需调用构造函数。

Source Code Implements Build Status Coverage Status Scrutinizer Code Quality Latest Stable Version License

活化映射

为活化器提供如何将输入数据映射到对象属性的说明。

Source Code Implements Build Status Coverage Status Scrutinizer Code Quality Latest Stable Version License

代理

为尚未加载到系统中的对象提供代理功能以进行懒加载。

Source Code Implements Build Status Coverage Status Scrutinizer Code Quality Latest Stable Version License

活化映射器

用于简化构建活化映射的工具。

Source Code Implements Build Status Coverage Status Scrutinizer Code Quality Latest Stable Version License