1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/peiyu1979-dataComposer

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

DataComposer: данные объединитель

DataComposer — это полезный инструмент, который позволяет объединять данные из различных источников в древовидную структуру. Он представляет собой библиотеку PHP, которая устанавливается или обновляется с помощью Composer.

В настоящее время DataComposer поддерживает следующие PHP-фреймворки: Laravel и ThinkPHP. Для поддержки других фреймворков необходимо связаться с автором.

DataComposer не является инструментом для запросов к данным, он не может выполнять соединения между данными из разных источников.

Проблемы и результаты

В повседневной работе программисты часто сталкиваются с необходимостью объединять данные из нескольких таблиц или баз данных. Эти задачи обычно повторяются и требуют большого количества SQL-запросов и кода. DataComposer разработан для упрощения объединения связанных данных.

С помощью простой конфигурации можно получать данные из разных источников и объединять их в соответствии с определёнными отношениями. Это позволяет избежать написания большого количества SQL и повторяющегося кода.

Пример использования

Предположим, что у нас есть две таблицы, и мы хотим получить данные о заказах вместе с соответствующими данными о клиентах.

  1. Создаём файл конфигурации order.php:
return [
    "property" => [
        "tableName" => "order",
    ],
    "dataSource" => [
        "customer" => [
            "property" => [
                "tableName" => "customer",
                "relationKey" => ["customer_id" => "id"]
            ]
        ]
    ]
]
  1. Получаем данные:
$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

Требования к среде

  1. PHP версии 5.4 или выше.
  2. Laravel или ThinkPHP.

Состав

  1. Общая конфигурация.
  2. Определение источника данных.
  3. Вызывающий код.

Начало работы

  1. Убедитесь, что ваш PHP-проект работает правильно, например, доступ к базе данных осуществляется без проблем.
  2. Установите DataComposer.
composer require peiyu/data-composer
  1. В файле app.php проекта добавьте следующую строку (важно):
'frameworkType'=>"thinkphp", // laveral 或 thinkphp,默认为 laveral 。如果框架是 laveral 可注释本行

Расположение файла app.php зависит от вашего фреймворка. Обратитесь к документации по вашему фреймворку.

  1. Создайте папку DataComposer в каталоге проекта.
  2. Создайте файл конфигурации conf.php в папке DataComposer:
return [
    'connectType'=>'db',  //默认数据源类型,可选项: 'db','mongo','redis','api','file','excel'
    'maxLimit'=>1000,  //每个数据源最大行数
    'cacheEnable'=>false,  //是否启用缓存
    'cacheExpire'=>10,  //缓存时间(分钟)
];
  1. Создайте файлы данных в папке DataComposer, где имя файла соответствует корневому узлу данных.
  2. Настройте файлы данных и убедитесь, что таблицы и данные верны.
  3. Получите данные, добавив следующий код в любой метод контроллера:
//use DataComposer\Engine;  //必要引用

$dc=new Engine("order");  // order 就是 数据源文件文件名
$data=$dc->GetData();
return $data;
  1. Повторите шаги 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"]
  • callback (необязательно)

    метод обратного вызова. Подробное описание использования приведено ниже.

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']);
Получение данных
$data=$dc->GetData();

У метода GetData есть ещё один необязательный параметр:

Атрибут Тип Примечание
nameList (необязательно) array белый список дочерних узлов

Если вам нужны данные только для части узлов на этом этапе получения данных, вы можете ввести массив с именами нужных узлов. Обратите внимание: имена корневых узлов недействительны. Если имя родительского узла отсутствует в массиве, имя дочернего узла будет проигнорировано.

Например:

$data=$dc->GetData(['customer']);

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

datacomposer: данные объединяются Это удобный небольшой инструмент, который объединяет данные из различных источников (например, MySQL, MongoDB, HTTP API, XML, Excel) в древовидную структуру на основе соответствия столбцов данных (подобно связи между первичным и внешним ключом). Это сторонний класс PHP-библиотеки, который можно установить или ... Развернуть Свернуть
MIT
Отмена

Обновления (6)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/peiyu1979-dataComposer.git
git@api.gitlife.ru:oschina-mirror/peiyu1979-dataComposer.git
oschina-mirror
peiyu1979-dataComposer
peiyu1979-dataComposer
master