同步操作将从 peiyu/dataComposer 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
datacomposer :数据聚合器
可以把 mysql,mongo,http api,xml, excel 等不同来源的数据按照数据列对应关系(类似于主键外键)聚合成树状结构的数据集合的实用小工具。
它是php第三方类库,通过composer工具安装或升级
目前支持的php框架:laveral, thinkphp。如需其他框架支持可联系作者。
本工具不是数据查询器,不能跨数据源连接查询(join),在下面有详细说明
在程序员的日常开发工作中,总是需要同时从多个数据库多个表里读取数据合并在一起,甚至还需要从http api取得数据合并到数据集合里。这些工作模式大同小异,繁琐并且重复。设计这个小工具的目的是为了比较简单的解决关联数据的聚合问题。
通过简单的配置就可以从多种数据源里获取数据,并按照定义的数据对应关系组装数据,省去了大量sql和重复代码。
如下有两张表,想在获取订单数据时,同时获取对应的商户数据。
return [
"property" => [
"tableName" => "order",
],
"dataSource" => [
"customer" => [
"property" => [
"tableName" => "customer",
"relationKey" => ["customer_id" => "id"]
]
]
]
]
$dc=new Engine("order");
$data=$dc->GetData();
数据如下
[
[
"id" => 1,
"customer_id" => 333,
"customer"=>[
"id"=>333,
"name"=>"小米",
"address"=>"北京"
],
"address" => "北京海淀西办街12号",
"name" => "张三",
"mobile" => "13455555555",
"number" => 3
],
[
"id" => 2,
"customer_id" => 354,
"customer"=>[
"id"=>354,
"name"=>"华为",
"address"=>"深圳"
],
"address" => "上海天津街45号301",
"name" => "李四",
"mobile" => "17634343434",
"number" => 1
]
];
通过 composer 安装
composer require peiyu/data-composer
composer require peiyu/data-composer
'frameworkType'=>"thinkphp", // laveral 或 thinkphp,默认为 laveral 。如果框架是 laveral 可注释本行
app.php文件位置请参阅各自框架的技术文档
内容如下
return [
'connectType'=>'db', //默认数据源类型,可选项: 'db','mongo','redis','api','file','excel'
'maxLimit'=>1000, //每个数据源最大行数
'cacheEnable'=>false, //是否启用缓存
'cacheExpire'=>10, //缓存时间(分钟)
];
//use DataComposer\Engine; //必要引用
$dc=new Engine("order"); // order 就是 数据源文件文件名
$data=$dc->GetData();
return $data;
请先查看“DataComposer脑图”
DataComposer主要由以下三部分组成
属性 | 类型 | 选项 | 默认值 | 备注 |
---|---|---|---|---|
connectType | string | 'db','mongo','redis','api','file','excel' | 'db' | 默认数据源类型 |
maxLimit | int | 1000 | 每个数据源最大行数 | |
cacheEnable | bool | true,false | false | 是否启用缓存 |
cacheExpire | int | 10 | 缓存时间(分钟) |
每个数据节点都支持独立定义,互不影响。
property
配置集合,因数据节点类型不同,配置项各不相同,下面详细说明
配置的所有值中都可以嵌入【参数】
参数格式:“{$” + 参数名 + “}” ,例如: {$v}
对参数赋值查看下面“调用代码”部分
"property" => [
"tableName" => "worker",
"where" => [["{$k}", '>', '{$v}']],
],
dataSource
子数据节点集合,数量不限
示例
connectType
数据源类型,关系型数据库,值:db。对关系型数据库的访问借助laveral或thinkphp自带组件实现。所以可以支持大多数关系型数据库:mysql,sqlserver,oracle,sqlite,等。如果值和默认配置connectType一致,可省略
connectName
连接字符串名称,确保项目连接配置中存在此名称,如果和系统默认连接名一致,可省略
tableName
表名,必填项
relationKey(重要属性)
和父级数据的关联健,根数据节点无需此属性,子数据源必填
格式:父级数据节点列名 => 本数据节点列名
示例:
"relationKey" => ["customer_id" => "id"]
where(可选)
过滤条件,可支持多个条件,关系为 and ,如果需要实现 or,请使用 callback 。
格式:参照laveral或thinkphp官方文档
示例:
"where"=>[["id",'>',23],["status",1]]
whereIn(可选)
多值过滤条件,可支持多个条件,关系为 and ,如果需要实现 or,请使用 callback 。
格式:"whereIn" => [列名=>多值,列名=>多值] ,多值为数组格式
示例:
"whereIn" => ["id"=>[24,25],"status"=>[1,2]]
orderBy(可选)
排序条件,可支持多个条件。
格式:"orderBy" => [[列名,asc或desc],[列名,asc或desc]] ,asc为默认,可省略
示例:
"orderBy"=>[["status",'desc'],["id"]]
fields(可选)
输出列名,数组格式,默认输出全部列。
格式:"fields" => [列名,列名, ...]]
示例:
"fields"=>["id","status"]
maxLimit(可选)
最大行数,如果和系统默认值一致,可省略
cacheEnable(可选)
是否使用缓存,布尔新 ,true 或 false 。如果和系统默认值一致,可省略
cacheExpire(可选)
缓存时间,分钟数,int型。如果和系统默认值一致,可省略
callback(可选)
回调方法,用法后面有详细说明
connectType
数据源类型,mongodb数据库,值:mongo。对mongodb型数据库的访问借助laveral或thinkphp自带组件实现。如果值和默认配置connectType一致,可省略
connectName
连接字符串名称,确保项目连接配置中存在此名称,如果和系统默认连接名一致,可省略
collection
collection名,必填项
relationKey(重要属性)
和父级数据的关联健,根数据节点无需此属性,子数据源必填
格式:父级数据节点列名 => 本数据节点列名
示例:
"relationKey" => ["customer_id" => "id"]
where(可选)
过滤条件,可支持多个条件,关系为 and ,如果需要实现 or,请使用 callback 。
格式:参照laveral或thinkphp官方文档
示例:
"where"=>[["id",'>',23],["status",1]]
whereIn(可选)
多值过滤条件,可支持多个条件,关系为 and ,如果需要实现 or,请使用 callback 。
格式:"whereIn" => [列名=>多值,列名=>多值] ,多值为数组格式
示例:
"whereIn" => ["id"=>[24,25],"status"=>[1,2]]
orderBy(可选)
排序条件,可支持多个条件。
格式:"orderBy" => [[列名,asc或desc],[列名,asc或desc]] ,asc为默认,可省略
示例:
"orderBy"=>[["status",'desc'],["id"]]
fields(可选)
输出列名,数组格式,默认输出全部列。
格式:"fields" => [列名,列名, ...]]
示例:
"fields"=>["id","status"]
maxLimit(可选)
最大行数,如果和系统默认值一致,可省略
cacheEnable(可选)
是否使用缓存,布尔新 ,true 或 false 。如果和系统默认值一致,可省略
cacheExpire(可选)
缓存时间,分钟数,int型。如果和系统默认值一致,可省略
callback(可选)
回调方法,用法后面有详细说明
connectType
数据源类型,redis,值:redis。对redis型数据库的访问借助laveral或thinkphp自带组件实现。如果值和默认配置connectType一致,可省略
connectName
连接字符串名称,确保项目连接配置中存在此名称,如果和系统默认连接名一致,可省略
relationKey(重要属性)
和父级数据的关联健,根数据节点无需此属性,子数据源必填
格式:父级数据节点列名,(无需定义本数据节点列名,列名为 value)
示例:
"relationKey" =>"customer_id"
cacheEnable(可选)
是否使用缓存,布尔新 ,true 或 false 。如果和系统默认值一致,可省略
cacheExpire(可选)
缓存时间,分钟数,int型。如果和系统默认值一致,可省略
connectType
数据源类型,http api 类型,值:api。利用第三方组件 GuzzleHttp 实现。如果值和默认配置connectType一致,可省略
relationKey(必填,重要属性)
和父级数据的关联健,根数据节点无需此属性,子数据源必填
格式:父级数据节点列名 => 本数据节点列名
示例:
"relationKey" => ["customer_id" => "id"]
url(必填)
http 请求地址,必须是完全地址,例如 'http://www.jxt.cn/check/this' 。
method(可选)
http请求方式 ,默认为 get,可支持 ‘get’,‘post’ 等方式。
options(可选)
请求参数控制请求的各个方面,包括头信息、查询字符串参数、超时、请求主体等。请参考文档
示例:
"options"=>[
"query"=>["id"=>44,"_d_"=>"ekss88"],
"form_params"=>["name"=>"nam","s"=>1],
"headers"=>[],
"timeout"=>3
]
callback(可选)
回调方法,用法后面有详细说明
connectType
数据源类型,文件类型,值:file。如果值和默认配置connectType一致,可省略
fileType(必填)
文件类型,选项:json,xml,phparray( Array 类型 )。字符串类型。
fullFileName(必填)
文件全名,包含文件路径和文件名。字符串类型。
relationKey(必填,重要属性)
和父级数据的关联健,根数据节点无需此属性,子数据源必填
格式:父级数据节点列名 => 本数据节点列名
示例:
"relationKey" => ["customer_id" => "id"]
callback(可选)
回调方法,用法后面有详细说明
connectType
数据源类型,excel类型,值:excel。如果值和默认配置connectType一致,可省略
fullFileName(必填)
文件全名,包含文件路径和文件名。字符串类型。
relationKey(必填,重要属性)
和父级数据的关联健,根数据节点无需此属性,子数据源必填
格式:父级数据节点列名 => 本数据节点列名
示例:
"relationKey" => ["customer_id" => "id"]
callback(可选)
回调方法,用法后面有详细说明
use DataComposer\Engine; //必要引用
$dc=new Engine("order"); // order 就是 数据源文件文件名
属性 | 类型 | 备注 |
---|---|---|
name(必须) | string | 数据源文件文件名 |
frameworktype(可选) | string | php框架类型:laveral, thinkphp |
config(可选) | array | 默认配置信息,和 conf.php 内容一致 |
dataComposerConfig(可选) | array | 数据源配置信息 |
参数 | 类型 | 备注 |
---|---|---|
name(必须) | string | 数据节点名 |
parameterValue(必须) | array | 变量名和值的键值对 |
//如果 property 如下
"property" => [
"tableName" => "worker",
"where" => [["id", '>', '{$_id}'],['name','{$_name}']],
],
// 则 赋值代码如下
$dc->SetParameterValue('worker',['_id'=>23,'_name'=>'li']);
$data=$dc->GetData();
GetData 方法还有一个可选参数
属性 | 类型 | 备注 |
---|---|---|
nameList(可选) | array | 子节点白名单 |
如果本次获取数据只需要部分节点数据,就可以把需要的节点名组成数组输入。 注意:根节点名无效。如果父级节点名不在数组中,子节点名会被忽略。
$data=$dc->GetData(['customer']);
编写中...
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。