bfatoms/imex
一个用于导入和导出数据的laravel包
v1.0.8
2021-08-03 15:40 UTC
Requires
- bfatoms/typecon: ^1.0
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);
}
}