mordilion/pipeline

一个PHP库,提供一种简单的方法来编写可配置的传输/导出,支持多种接口。

0.2 2024-05-29 09:23 UTC

This package is auto-updated.

Last update: 2024-08-29 09:53:51 UTC


README

Packagist

Pipeline

描述

Pipeline是一个库,可以快速且可靠地传输数据,或创建支持任何类型接口(如PDO、SplFileObject(CSV等)、数组以及您的自定义实现)的导出。它使用https://github.com/mordilion/Configurable来实现完全可配置。

基本示例

<?php

use Mordilion\Pipeline\Pipeline;
use Mordilion\Pipeline\Reader\ArrayReader;
use Mordilion\Pipeline\Writer\SplFileObjectWriter;

$data = [
    ['id' => 1, 'name' => 'John Doe', 'email' => 'john.doe@domain.invalid'],
    ['id' => 2, 'name' => 'Jane Doe', 'email' => 'jane.doe@domain.invalid'],
    ['id' => 3, 'name' => 'Max Mustermann', 'email' => 'max.mustermann@domain.invalid']
];

$reader = new ArrayReader();
$reader->setData($data);

$filename = __DIR__ . '/export.csv';
$writer = new SplFileObjectWriter();
$writer->setFile(new \SplFileObject($filename, 'w'))
    ->setMode(SplFileObjectWriter::MODE_CSV);

$pipeline = new Pipeline();
$pipeline->setReader($reader)
    ->setWriter($writer)
    ->transfer();

数据库到CSV

一个示例,展示如何将数据库数据导出到CSV文件,并添加额外的列。

<?php

use Mordilion\Pipeline\Pipeline;
use Mordilion\Pipeline\Reader\PDOReader;
use Mordilion\Pipeline\Writer\SplFileObjectWriter;

$reader = new PDOReader();
$reader->setPdo(new \PDO('sqlite:' . __DIR__ . '/sqlite.db'))
    ->setSql('SELECT * FROM demo');

$filename = __DIR__ . '/export.csv';
$writer = new SplFileObjectWriter();
$writer->setFile(new \SplFileObject($filename, 'w'))
    ->setMode(SplFileObjectWriter::MODE_CSV);

$pipeline = new Pipeline();
$pipeline->setReader($reader)
    ->setWriter($writer)
    ->transfer(function (array $row, ReaderAbstract $reader, WriterAbstract $writer) {
        $timestamps = [
            'created_at' => isset($row['created_at']) ? $row['created_at'] : date('Y-m-d H:i:s'),
            'updated_at' => isset($row['updated_at']) ? $row['updated_at'] : date('Y-m-d H:i:s'),
            'exported_at' => date('Y-m-d H:i:s')
        ];

        return array_merge($row, $timestamps);
    });

目录列表到CSV

一个示例,展示如何将数据库数据导出到CSV文件,并添加额外的列。

<?php

use Mordilion\Pipeline\Pipeline;
use Mordilion\Pipeline\Reader\ExecReader;
use Mordilion\Pipeline\Writer\SplFileObjectWriter;

$reader = new ExecReader();
$reader->setCommand('ls /');

$filename = __DIR__ . '/directory-listing.csv';
$writer = new SplFileObjectWriter();
$writer->setFile(new \SplFileObject($filename, 'w'))
    ->setMode(SplFileObjectWriter::MODE_CSV);

$pipeline = new Pipeline();
$pipeline->setReader($reader)
    ->setWriter($writer)
    ->transfer();