transformers/mapping-transformer

整合Mapper,使用映射转换数组集合。

3.0.0 2022-12-07 22:14 UTC

This package is auto-updated.

Last update: 2024-09-08 01:57:43 UTC


README

Latest version Total downloads Build status Test coverage Code style

MappingTransformer将Mapper集成到Porter中,以支持使用Mapping对象进行数据转换。由于Mapper的详细讨论超出了本文件的范畴,但链接的存储库包含完整的文档。MappingTransformer通过提供一种名为SubImport的强大映射策略在Mapper的基础上进行扩展。

子导入

SubImport策略提供了一种将数据集联合起来的方式。一个映射可以包含任意数量的子导入,每个子导入都可以接收不同的ImportSpecification。子导入使Porter开始一个新的导入操作,因此可以无限制地支持所有导入选项,包括从不同的提供商导入以及为每个子导入应用不同的映射。

签名

SubImport(ImportSpecification|callable $specificationOrCallback)
  1. $specificationOrCallback – 一个ImportSpecification实例或返回此类实例的callable

ImportSpecification 示例

以下示例导入MyImportSpecification并将输入数据中的foo字段复制到输出映射中。然后它使用MyDetailsSpecification进行子导入,并将结果存储在输出映射的details键中。

$records = $porter->import(
    (new MyImportSpecification)
        ->setMapping(new AnonymousMapping([
            'foo' => new Copy('foo'),
            'details' => new SubImport(MyDetailsSpecification),
        ]))
);

回调示例

以下示例与上一个示例相同,但现在的MyDetailsSpecification需要一个标识符,该标识符来自输入数据中的details_id。这仅使用回调才有可能,因为我们不能在规范中注入策略。

$records = $porter->import(
    (new MyImportSpecification)
        ->setMapping(new AnonymousMapping([
            'foo' => new Copy('foo'),
            'details' => new SubImport(
                function (array $record) {
                    return new MyDetailsSpecification($record['details_id']);
                }
            ),
        ]))
);