stratadox / hydrate
v0.2
2018-01-21 21:58 UTC
Requires
- php: >=7.1
- stratadox/hydration: ^1.8
- stratadox/hydration-mapper: ^1.2
- stratadox/hydration-mapping: ^1.4
- stratadox/hydration-proxies: ^1.3
- stratadox/hydrator: ^1.2
Requires (Dev)
- phpunit/phpunit: ^6.5
- rpkamp/fancy-testdox-printer: ^0.2.5
This package is auto-updated.
Last update: 2024-09-29 03:47:11 UTC
README
Hydrate
模块包含从任意数据中活化对象所需的所有内容。这些数据可能来自 SQL 数据库、文档存储、Web API 或其他任何来源。
安装
使用 composer 安装
composer require stratadox/hydrate
基本用法
- 使用映射器创建一个活化器,可以从输入数据构建您的领域模型
$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();
- 从数据源加载数据
$books = []; $result = $database->query("SELECT * FROM `book`"); while ($data = $result->row) { $books[] = $hydrator->fromArray($data); }
- 完成!您的对象(在本例中是一批书籍),现在已作为完整的对象图活化,每个都包含其相关对象,如标题、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
产生对象,包含其属性中的数据,而无需调用构造函数。
活化映射
为活化器提供如何将输入数据映射到对象属性的说明。
代理
为尚未加载到系统中的对象提供代理功能以进行懒加载。
活化映射器
用于简化构建活化映射的工具。