tahsinyuksel/ty-mapping-merge

PHP 数据映射和合并选项

v1.1.0 2018-05-03 12:07 UTC

This package is not auto-updated.

Last update: 2024-09-21 00:14:35 UTC


README

ty-mapping-merge; 包含多个数据进行映射和合并的结果。

对象和数组可用。

例如
帖子与用户关系的映射和合并。
映射:关系,键,帖子(fromUserId) <==> 用户(id)
合并:选择字段(fromUser)的关联数据合并

// post data
$posts = array(
    array('id'=> 1, 'title'=> 'happy years 2018', 'fromUserId'=> 1),
    array('id'=> 2, 'title'=> 'i want to see you', 'fromUserId'=> 1),
    array('id'=> 3, 'title'=> 'Champion RealMadrid', 'fromUserId'=> 2),
    array('id'=> 4, 'title'=> 'love php', 'fromUserId'=> 3),
);

// user data
$users = array(
    array('id'=> 1, 'name'=> 'George', 'avatar'=> 'user1.jpg'),
    array('id'=> 2, 'name'=> 'Jack', 'avatar'=> 'user2.jpg'),
    array('id'=> 3, 'name'=> 'Oscar', 'avatar'=> 'user3.jpg'),
);

结果

Array
(
    [0] => Array
        (
            [id] => 1
            [title] => happy years 2018
            [fromUserId] => 1
            [fromUser] => Array
                (
                    [id] => 1
                    [name] => George
                    [avatar] => user1.jpg
                )

        )
)        

用例

在一个结果中合并不同的数据源
创建或合并关系型数据源
通过微服务结果创建数据,合并
聚合多个结果的数据

微服务

例如社交应用,微服务架构

  • 帖子微服务
  • 用户微服务
  • 点赞微服务
  • 评论微服务
  • 指标微服务等。

逐步数据聚合

posts = postService->getPosts();
ids = posts.extractIds();
fromUserIds = posts.extractFromUserIds();

// get result sets by per microservice
users = userService->getByIds(fromUserIds);
likes = likeService->getByIds(ids);
comments = commentService->getByIds(ids);
metrics = metricService->getByIds(ids);

数据映射、聚合、组合、合并、连接?
用于TyMappingMerge。

如何使用

/* 
$posts = array( ... );
$users = array( ... );
... defines codes ...
*/

// option user
$optionUser = new MapOption();
$optionUser->setVar($users);
$optionUser->setProp('fromUser');
$optionUser->setMapField('fromUserId');
$optionUser->setTargetMapField('id');

// set options
$options[] = $optionUser;

// mapping
$mapping = new OptionMapping();
$mapping->setOptions($options);
$result = $mapping->map($posts);

查看测试目录中的社交应用示例

文档

MapOption:多个映射和合并定义。

MapOption函数
->setVar($targetVar) 必要:关系数据的目标变量
->setProp('viewField') 必要:添加目标结果
->setMapField('sourceRelationField') 必要:源关系键字段
->setTargetMapField('targetRelationId') 可选:为空时则使用源映射字段
->setSetType('add') 可选:项目添加类型(set|add|bool)默认:set ->setSelects(array('id', 'message')) 可选:选择可见字段

OptionMapping:主要的映射和合并操作。

OptionMapping函数
->setOptions($defineOptionList) 必要:映射规则定义
->map($mainData) 必要:主源数据

功能

  • 建立收件人间的关系
  • 使用自定义字段进行数据合并
  • 数组或对象可用
  • 选择可见字段
  • 易于使用

示例和测试

查看测试文件夹

支持类型

数组和对象

待办事项

嵌套数据

要求 & 依赖

PHP 版本 >= 5.4

版本

v1.1.0

许可

MIT

联系方式

问题、建议、评论

Tahsin Yüksel info@tahsinyuksel.com