quince / data-importer
将表格数据文件导入Laravel模型工具
Requires
- php: >=5.5.0
- illuminate/config: ~4.0
- illuminate/database: ~4.0
- illuminate/support: ~4.0
- league/csv: ~6.0
Requires (Dev)
- mockery/mockery: ~0.9
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2023-05-07 21:55:53 UTC
README
将表格数据文件导入Laravel模型工具
安装
将data-importer添加到你的composer.json文件中。
对于laravel 4
"require": { "quince/data-importer": "~1.0" }
对于laravel 5
"require": { "quince/data-importer": "~2.0" }
使用composer安装此包。
$ composer update
注册包
在app/config/app.php中找到的提供者数组内注册服务提供者。
'providers' => array( 'Quince\DataImporter\DataImporterServiceProvider' )
配置
下一步是运行以下命令发布包配置:
在laravel 4中运行
$ php artisan config:publish quince/data-importer
在laravel 5中运行
$ php artisan vendor:publish
配置文件可在laravel 4中的app/config/packages/quince/data-importer/config.php和laravel 5中的config/quince/data-importer.php中找到。
使用方法
您可以使用data-importer的两种方式
使用Laravel IoC容器
请确保导出服务管理器已在您的应用程序配置中注册。
<?php // Initialize required data $filePath = '/absolute/path/to/file/to/import'; $bindingModel = '/Namespace/ToYour/Model'; // or YourModel::class // get data-importer out of IoC $importer = App::make('importer'); /** @var RowsCollection $data */ $importer->import($filePath, $bindingModel, function($data) { // whatever you want to do with data // $data is an instance of RowsCollection // for example /** @var RowData $row */ foreach ($data as $row) { YourModel::create($row->getBase()); } });
使用Laravel依赖注入
您也可以在您的类中注入Quince\DataImporterManager并使用它。
<?php use Quince\DataImporterManager as Importer; class ExampleClass { protected $importer public function __construct(Importer $importer) { $this->importer = $importer; } public function exampleMethod($file) { $this->importer->import($file->getPath(), DesiredModel::class, function($data) { // whatever you want to do with data }); } }
高级使用
文件中的每一行都是数据库中记录的表示者,每条记录可能都有相关记录。在您的CSV文件中,一列可能包含这些相关记录。该列的标题是关系名称和该列中提供的关系字段名称的连接(如果配置文件中设置了relation_joint,则与连接符连接)。如果一列有多个相关记录,则应使用配置文件中设置的relation_value_delimiter将值分隔。
示例
下面的文件
| 名称 | 用户名 | 电子邮件 | 电话号码 |
|---|---|---|---|
| John Doe | Johny | J.Doe@mail.com | 0941120773 |
| Jane Doe | Jane6 | miss.J.Doe@gmail.com | 0929339687|0916740160 |
将被转换成类似这样(作为JSON):
[
{
"name": "John Doe",
"username": "Johny",
"email": "J.Doe@mail.com",
"phones": [
{
"number": "0941120773"
}
]
},
{
"name": "Jane Doe",
"username": "Jane6",
"email": "miss.J.Doe@gmail.com",
"phones": [
{
"number": "0929339687"
},
{
"number": "0916740160"
}
]
}
]
附加字段
当文件中只提供了表的一些字段时,您可以手动设置这些字段。
注意: 您应指定附加字段是为主记录还是相关记录
<?php // Initialize required data $filePath = '/absolute/path/to/file/to/import'; $bindingModel = '/Namespace/ToYour/Model'; // or YourModel::class $additionalFields = [ 'base' => [ 'column_name' => 'value' ], 'relation' => [ 'relation_name' => [ 'column_name' => 'value' ] // another relations goes heare ] ]; // get data-importer out of IoC $importer = App::make('importer'); $importer->setAdditionalFields($additionalFields) ->import($filePath, $bindingModel, function($data) { // whatever you want to do with data });
如果指定的附加字段在CSV文件中存在,数据将从中加载。但是,如果将true作为setAdditionalFields的第二个参数传递,则附加字段将覆盖CSV文件中的现有数据。
$importer->setAdditionalFields($additionalFields, true) ->import($filePath, $bindingModel, function($data) { // whatever you want to do with data });
翻译文件标题
当您的文件列标题与您的表列不同时,您可以将它们映射到您的数据库表列。假设您的文件如下所示:
| 真实姓名 | 昵称 | 电子邮件地址 | 电话号码 |
|---|---|---|---|
| John Doe | Johny | J.Doe@mail.com | 0941120773 |
| Jane Doe | Jane6 | miss.J.Doe@gmail.com | 0929339687|0916740160 |
您可以为您的文件自定义标题传递一个字典,将其翻译为其表列名称。
<?php // Initialize required data $filePath = '/absolute/path/to/file/to/import'; $bindingModel = '/Namespace/ToYour/Model'; // or YourModel::class $dictionary = [ 'Real Name' => 'name', 'Nickname' => 'username', 'Mail Address' => 'email', 'Phone Numbers' => 'phones.number' ]; // get data-importer out of IoC $importer = App::make('importer'); $importer->setDictionary($dictionary) ->import($filePath, $bindingModel, function($data) { // whatever you want to do with data });
您还可以将您的文件的单列映射到数据库表的列。
$importer->setColumnDictionary($columnName, $translation) ->import($filePath, $bindingModel, function($data) { // whatever you want to do with data });
有关高级用法的信息,请访问wiki页面
配置文件
| 字段 | 描述 | 默认值 |
|---|---|---|
| 分隔符 | 用于在行中分隔每列的字符。 | , |
| 封装符 | 用于指定封装符的字符。 | " |
| 转义符 | 用于转义无效字符的字符。 | \ |
| chunk_size | 传递给导入方法中闭包处理的行的大小。 | 100 |
| relation_joint | 用于连接关系名称和要导入的关系表的列的字符。 | . |
| relation_value_delimiter | 用于分隔关系值的字符。 | | |