DataComposer: данные объединитель
DataComposer — это полезный инструмент, который позволяет объединять данные из различных источников в древовидную структуру. Он представляет собой библиотеку PHP, которая устанавливается или обновляется с помощью Composer.
В настоящее время DataComposer поддерживает следующие PHP-фреймворки: Laravel и ThinkPHP. Для поддержки других фреймворков необходимо связаться с автором.
DataComposer не является инструментом для запросов к данным, он не может выполнять соединения между данными из разных источников.
Проблемы и результаты
В повседневной работе программисты часто сталкиваются с необходимостью объединять данные из нескольких таблиц или баз данных. Эти задачи обычно повторяются и требуют большого количества SQL-запросов и кода. DataComposer разработан для упрощения объединения связанных данных.
С помощью простой конфигурации можно получать данные из разных источников и объединять их в соответствии с определёнными отношениями. Это позволяет избежать написания большого количества SQL и повторяющегося кода.
Пример использования
Предположим, что у нас есть две таблицы, и мы хотим получить данные о заказах вместе с соответствующими данными о клиентах.
- Создаём файл конфигурации order.php:
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
]
];
Поддерживаемые источники данных
- Почти все реляционные базы данных: MySQL, SQL Server, Oracle, SQLite и другие.
- MongoDB.
- Redis.
- Excel.
- Файлы данных: JSON, XML, PHPArray.
- HTTP API.
- Другие источники данных (поддерживаются через пользовательские считыватели).
Установка
Устанавливается с помощью Composer:
composer require peiyu/data-composer
Требования к среде
- PHP версии 5.4 или выше.
- Laravel или ThinkPHP.
Состав
- Общая конфигурация.
- Определение источника данных.
- Вызывающий код.
Начало работы
- Убедитесь, что ваш PHP-проект работает правильно, например, доступ к базе данных осуществляется без проблем.
- Установите DataComposer.
composer require peiyu/data-composer
- В файле app.php проекта добавьте следующую строку (важно):
'frameworkType'=>"thinkphp", // laveral 或 thinkphp,默认为 laveral 。如果框架是 laveral 可注释本行
Расположение файла app.php зависит от вашего фреймворка. Обратитесь к документации по вашему фреймворку.
- Создайте папку DataComposer в каталоге проекта.
- Создайте файл конфигурации conf.php в папке DataComposer:
return [
'connectType'=>'db', //默认数据源类型,可选项: 'db','mongo','redis','api','file','excel'
'maxLimit'=>1000, //每个数据源最大行数
'cacheEnable'=>false, //是否启用缓存
'cacheExpire'=>10, //缓存时间(分钟)
];
- Создайте файлы данных в папке DataComposer, где имя файла соответствует корневому узлу данных.
- Настройте файлы данных и убедитесь, что таблицы и данные верны.
- Получите данные, добавив следующий код в любой метод контроллера:
//use DataComposer\Engine; //必要引用
$dc=new Engine("order"); // order 就是 数据源文件文件名
$data=$dc->GetData();
return $data;
- Повторите шаги 6–8 для создания дополнительных файлов данных и получения данных. Подключение
- 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 (необязательно) — время кэширования, в минутах. Целое число. Если значение совпадает со значением по умолчанию в системе, его можно опустить;
- callback (необязательно) — метод обратного вызова. Как использовать, будет подробно объяснено позже.
Свойства типа mongo
- connectType — тип источника данных, база данных MongoDB, значение: mongo. Доступ к базе данных MongoDB осуществляется с помощью встроенных компонентов laveral или thinkphp. Если значение соответствует конфигурации connectType по умолчанию, его можно опустить;
- connectName — строка подключения. Убедитесь, что в конфигурации проекта существует это имя. Если оно совпадает с именем системы по умолчанию, его можно опустить;
- 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 (необязательно) — срок действия кеша, в минутах. Целочисленное значение. Если значение совпадает со значением по умолчанию в системе, его можно опустить;
- callback (необязательно) — метод обратного вызова. Как использовать, будет подробно объяснено позже.
Свойства типа redis
- connectType — тип источника данных, Redis, значение: redis. Доступ к базе данных Redis осуществляется с помощью встроенных компонентов laveral или thinkphp. Если значение соответствует конфигурации connectType по умолчанию, его можно опустить;
- connectName — строка подключения. Убедитесь, что в конфигурации проекта существует это имя. Если оно совпадает с именем системы по умолчанию, его можно опустить;
- relationKey (обязательное свойство) — ключ связи с родительскими данными. Корневой узел не требует этого атрибута, дочерний источник должен быть заполнен.
- Формат: имя столбца родительских данных. (Имя столбца текущего узла не нужно определять, имя столбца — value).
- Пример:
"relationKey" =>"customer_id"
- cacheEnable (необязательно) — использовать ли кеш, логическое значение true или false. Если значение совпадает со значением по умолчанию в системе, его можно опустить;
- cacheExpire (необязательно) — срок действия кэша, в минутах. Целое число. Если значение совпадает со значением по умолчанию в системе, его можно опустить;
Свойства http api типа
- 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 (тип массива). Строковый тип.
- fullFileName (обязательно) — полное имя файла, включая путь к файлу и имя файла. Строковый тип;
- relationKey (обязательно, важное свойство) — ключ связи с родительскими данными. Корневому узлу этот атрибут не нужен, дочернему источнику необходимо заполнить.
- Формат: имя столбца родительских данных => имя столбца текущего узла.
- Пример:
"relationKey" => ["customer_id" => "id"]
- callback (необязательно) — метод обратного вызова. Как использовать, будет подробно объясчено позже.
Тип свойства excel
- connectType — тип источника данных, Excel, значение: excel. Если значение совпадает с конфигурацией connectType по умолчанию, его можно опустить;
- fullFileName (обязательно) — полное имя файла, включая путь к файлу и имя файла. Файл полностью, включая путь и имя файла. Строковый тип.
-
relationKey (обязательно, важный атрибут)
и ключ связи с данными родительского уровня. Родительскому узлу данных этот атрибут не нужен, дочерний источник данных должен его заполнить.
Формат: имя столбца родительского узла данных => имя столбца текущего узла данных.
Пример:
"relationKey" => ["customer_id" => "id"]
3. Вызов кода
Ссылка
use DataComposer\Engine; //необходимая ссылка
Создание экземпляра
- Первый способ (рекомендуется)
$dc=new Engine("order"); // order — это имя файла источника данных
- Второй способ, без использования конфигурационного файла, ввод конфигурации при создании экземпляра
| Атрибут | Тип | Примечание |
|:---|:---|:---:|
name (обязательно) | string | имя файла источника данных |
frameworktype (необязательно) | string | тип фреймворка PHP: laveral, thinkphp |
config (необязательно) | array | информация о конфигурации по умолчанию, соответствует содержимому conf.php |
dataComposerConfig (необязательно) | array | конфигурация источника данных |
Присвоение значения переменной в свойстве [property]. Если в [property] нет переменных, можно пропустить этот шаг.
- Метод: SetParameterValue
- Параметры:
| Параметр | Тип | Примечание |
|:---|:---|:---:|
name (обязательно) | string | имя узла данных |
parameterValue (обязательно) | array | пары ключ-значение имени переменной и значения |
Если свойство выглядит следующим образом:
"property" => [
"tableName" => "worker",
"where" => [["id", '>', '{$_id}'],['name','{$_name}']],
],
то код присвоения значения будет выглядеть так:
//如果 property 如下
$dc->SetParameterValue('worker',['_id'=>23,'_name'=>'li']);
Получение данных
У метода GetData есть ещё один необязательный параметр:
Атрибут |
Тип |
Примечание |
nameList (необязательно) |
array |
белый список дочерних узлов |
Если вам нужны данные только для части узлов на этом этапе получения данных, вы можете ввести массив с именами нужных узлов.
Обратите внимание: имена корневых узлов недействительны. Если имя родительского узла отсутствует в массиве, имя дочернего узла будет проигнорировано.
Например:
$data=$dc->GetData(['customer']);
Комментарии ( 0 )