bfatoms/imex

一个用于导入和导出数据的laravel包

v1.0.8 2021-08-03 15:40 UTC

This package is auto-updated.

Last update: 2024-09-29 05:28:42 UTC


README

数据是无价的

===============

安装

composer require bfatoms/imex

发布配置

php artisan vendor:publish bfatoms/imex

导入文档

更新或创建

目前导入器使用laravel的updateOrCreate()模型函数,查找特定字段的语法如下

http://example.com/api/related-products/import?find=product_id,related_product_type_id,related_product_id

上面的查询字符串将产生以下查询

Product::updateOrCreate([
    'related_product_id' => 'id in csv or parsed from the database',
    'related_product_type_id' => 'id in csv or parsed from the database',
    'product_id' => 'id in csv or parsed from the database'
],[
    array data parsed from csv or database
]);

最简单的导入

默认情况下,安装后您可以通过访问此路由立即导入文件

api/{model}/import

product_prices.csv

$guzzle->post("http://example.com/api/products/import", ["file" => "product_prices.csv"]);

复杂导入

有时客户会向您提供一个产品列表,其中包含用于促销或交叉销售的相关产品,在数据库中您创建如下内容。

数据库表:related_products

您收到的文件如下

related_products.csv

问题:您想从一个表中找到所有product_code并将其转换为product_id

解决方案:查询参数

Legend:
column[field_name_in_csv][model]=ModelInSystem
column[field_name_in_csv][find][field_in_model]=file_data
column[field_name_in_csv][find][organization_id]=b8f7b594-f50d-454f-9b6c-7067b34d3391
column[field_name_in_csv][return]=ReturnSomethingFromModelLikeID
column[field_name_in_csv][field]=service_id

例如,对于上面的related_products.csv

column[product_code][model]=Product
column[product_code][find][product_code]=file_data
column[product_code][find][organization_id]=b8f7b594-f50d-454f-9b6c-7067b34d3391
column[product_code][return]=id
column[product_code][field]=product_id

column[related_product_code][model]=Product
column[related_product_code][find][product_code]=file_data
column[related_product_code][find][organization_id]=b8f7b594-f50d-454f-9b6c-7067b34d3391
column[related_product_code][return]=id
column[related_product_code][field]=related_product_id

说明

由于查询字符串column[product_code][field]=product_id,product_code将被转换为product_id

由于查询字符串column[related_product_code][field]=related_product_id,related_product_code将被转换为related_product_id

现在您满足了表related_products的字段名称

然后在数据库中其他列的数据将创建如下查询

Product::where([
    'product_code' => '000-AAA-001',
    'organization_id'=> 'b8f7b594-f50d-454f-9b6c-7067b34d3391'
])->select('id')->first();

单词file_data是常量,意味着它将从csv文件获取数据

如何使用自定义导入服务

导入服务接受数组进行解析

use BfAtoms\Imex\Import;

class Test{
    public function import()
    {
        $data = [
            'product_id' => 1,
            'product_code' => '000-AAA-0001'
        ];
        $import = new Import();
        $import->model('Product');
        $import->import($data);
    }
}