xepozz / remap
此包的最新版本(1.0)没有提供许可证信息。
1.0
2024-03-16 20:38 UTC
Requires
- yiisoft/db: ^1.0
- yiisoft/hydrator: dev-master
Requires (Dev)
- phpunit/phpunit: ^10.5
- vimeo/psalm: ^5.23
- yiisoft/db-sqlite: ^1.0
This package is auto-updated.
Last update: 2024-09-17 13:47:35 UTC
README
该库允许您将数据库中的数据映射到对象中。
描述
主要目标是简化查询长SQL查询并将结果映射到对象的过程。
该映射器设计用于同时查询多个对象。它使用 \Generator
从数据库中获取数据并将其逐个映射到对象,因此它内存效率高。
底层使用
- yiisoft/db 从数据库获取数据
- yiisoft/hydrator 将数据映射到对象。
安装
composer req xepozz/remap
用法
将类名和查询传递给 Remap
。
final class Todo { public int $id; public string $title; public int $status; public int $created_at; }
$sql = 'SELECT id, title, status, created_at FROM todo WHERE id = :id LIMIT 1'; $params = ['id' => 1]; $remap->map(Todo::class, $sql, $params); // returns \Generator of Todo objects
湿化
使用 yiisoft/hydrator 带来了 Hydrator
库的好处: 属性 修改湿化过程的行为。
use Yiisoft\Hydrator\Attribute\Parameter\Data; use Yiisoft\Hydrator\Attribute\SkipHydration; final class TodoModelHydrator { #[Data('id')] public string $identifier; #[Data('title')] public string $text; public string $status; #[Data('created_at')] public string $date_created; }
或任何与 Hydrator
库兼容的其他属性。
提示
在类中定义与查询相关的方法
final class Todo { public int $id; public string $title; public int $status; public int $created_at; public static function selectOne(int $id): array { return [ 'SELECT id, title, status, created_at FROM todo WHERE id = :id LIMIT 1', ['id' => $id], ]; } public static function selectAll(): string { return 'SELECT id, title, status, created_at FROM todo'; } }
现在使用很简单
$remap->map(Todo::class, ...Todo::selectOne(1)); // selectOne may return ['SELECT ...', ['id' => 1]] $remap->map(Todo::class, Todo::selectOne(1)); // or shorter, without unpacking $remap->map(Todo::class, Todo::selectAll()); $remap->map(...Todo::selectAll()); // selectAll may return [Todo::class, "SELECT ..."]
解包并存储结果
$remap->map(...)
始终返回一个生成器。如果您想获取对象数组,请使用 iterator_to_array
$result = iterator_to_array( $remap->map(Todo::class, Todo::selectOne(1)) );
或者更短
$result = [...$remap->map(Todo::class, Todo::selectOne(1))];