bakame/csv-doctrine-collection-bridge

使用 League\Csv 的 Csv Doctrine Collection bridge

1.1.0 2020-06-23 11:33 UTC

This package is auto-updated.

Last update: 2024-09-18 12:03:26 UTC


README

Latest Version Software License Build Status

本包包含

<?php

use Bakame\Csv\Extension as CsvExtension;
use Doctrine\Common\Collections\Criteria;
use League\Csv\Reader;

$csv = Reader::createFromPath('/path/to/my/file.csv');
$csv->setHeaderOffset(0);
$csv->setDelimiter(';');

$criteria = Criteria::create()
    ->andWhere(Criteria::expr()->eq('prenom', 'Adam'))
    ->orderBy( [ 'annee' => 'ASC', 'foo' => 'desc', ] )
    ->setFirstResult(0)
    ->setMaxResults(10)
;

//you can do

$resultset = CsvExtension\CriteriaConverter::convert($criteria)->process($csv);
$result = new CsvExtension\RecordCollection($resultset);

//or

$collection = new CsvExtension\RecordCollection($csv);
$result = $collection->matching($criteria);

系统需求

  • league/csv >= 9.6
  • doctrine/collection >= 1.6.0

但推荐使用每个依赖的最新稳定版本。

安装

$ composer require bakame/csv-doctrine-collection-bridge

用法

League\Csv\Reader 转换为 Doctrine Collection 对象。

<?php

use Bakame\Csv\Extension\RecordCollection;
use League\Csv\Reader;

$csv = Reader::createFromPath('/path/to/my/file.csv');
$csv->setHeaderOffset(0);
$csv->setDelimiter(';');

$collection = new RecordCollection($csv);

League\Csv\ResultSet 转换为 Doctrine Collection 对象。

<?php

$csv = Reader::createFromPath('/path/to/my/file.csv');
$csv->setHeaderOffset(0);
$csv->setDelimiter(';');

$stmt = (new Statement())
    ->where(function (array $row) {
        return isset($row['email'])
            && false !== strpos($row['email'], '@github.com');
    });

$collection = new RecordCollection($stmt->process($csv));

使用 Doctrine Criteria 过滤 League\Csv\Reader 对象

您可以使用提供的 Bakame\Csv\Extension\criteria_convert 函数将 Doctrine\Common\Collections\Criteria 对象转换为 League\Csv\Statement 对象。

<?php

use Bakame\Csv\Extension\CriteriaConverter;
use Doctrine\Common\Collections\Criteria;
use League\Csv\Reader;

$csv = Reader::createFromPath('/path/to/my/file.csv');
$csv->setHeaderOffset(0);
$csv->setDelimiter(';');

$criteria = Criteria::create()
    ->andWhere(Criteria::expr()->eq('name', 'Adam'))
    ->orderBy(['years', 'ASC'])
    ->setFirstResult(0)
    ->setMaxResults(10)
;

$stmt = CriteriaConverter::convert($criteria);
$resultset = $stmt->process($csv);

CriteriaConverter 高级用法

<?php

use Doctrine\Common\Collections\Criteria;
use League\Csv\Statement;

public static CriteriaConverter::convert(Criteria $criteria, Statement $stmt = null): Statement
public static CriteriaConverter::addWhere(Criteria $criteria, Statement $stmt = null): Statement
public static CriteriaConverter::addOrderBy(Criteria $criteria, Statement $stmt = null): Statement
public static CriteriaConverter::addInterval(Criteria $criteria, Statement $stmt = null): Statement
  • CriteriaConverter::convertCriteria 对象转换为 Statement 对象。
  • CriteriaConverter::addWhereCriteria::getWhereExpression 过滤器添加到提交的 Statement 对象。
  • CriteriaConverter::addOrderByCriteria::getOrderings 过滤器添加到提交的 Statement 对象。
  • CriteriaConverter::addIntervalCriteria::getFirstResultCriteria::getMaxResults 过滤器添加到提交的 Statement 对象。

警告:虽然 Criteria 对象是可变的,但 Statement 对象是不可变的。所有返回的 Statement 对象都是新实例

贡献

欢迎贡献,并将得到充分认可。请参阅 CONTRIBUTING 了解详情。

测试

库有一个

  • 一个 PHPUnit 测试套件
  • 一个使用 PHP CS Fixer 的编码风格合规性测试套件。
  • 一个使用 PHPStan 的代码分析合规性测试套件。

要运行测试,请从项目文件夹运行以下命令。

$ composer test

安全性

如果您发现任何安全问题,请通过电子邮件 nyamsprod@gmail.com 联系,而不是使用问题跟踪器。

致谢

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件