Laravel Ingest 罗宾·科普 是一个配置驱动的 ETL(提取、转换、加载)包,它用声明式导入类取代了一次性导入脚本。它通过 PHP 生成器和 Laravel 队列处理从几百行到几千万行的文件,并保持内存使用量与文件大小无关。
主要特点
- 使用流畅的声明式导入器类
IngestConfig建造者 - 自动解析
BelongsTo和BelongsToMany关系 - 重复数据处理策略:
SKIP,CREATE,UPDATE, 和UPDATE_IF_NEWER - 在写入数据库之前,使用试运行模式验证导入操作。
- 使用可下载的 CSV 导出功能进行行跟踪失败
- 列别名用于将不同的标题名称映射到单个字段
- 基于行数据的动态模型解析
- 导入源:文件上传、文件系统磁盘(包括 S3)、URL、FTP 和 SFTP
- 每个导入器自动生成的 Artisan 命令和 REST API 端点
定义导入器
安装软件包并运行迁移后,您需要创建一个实现以下接口的导入器类:
IngestDefinition
并返回一个
IngestConfig
按照惯例,他们居住在
App\Ingest
命名空间:
命名空间
应用程序/摄取
;使用
应用程序\模型\产品
;使用
LaravelIngest\Contracts\IngestDefinition
;使用
LaravelIngest\DTOs\IngestConfig
;使用
LaravelIngest\Enums\DuplicateStrategy
;使用
LaravelIngest\Enums\SourceType
;班级
产品进口商
实现
摄取定义{
民众
功能
获取配置
()
:
IngestConfig{
返回
IngestConfig
::
为了
(
产品
::班级
)
->
来自源
(
源类型
::
上传
)
->
keyedBy
(
'sku'
)
->
onDuplicate
(
复制策略
::
更新
)
->
地图
(
“产品名称”
,
'姓名'
)
->
涉及
(
'类别'
,
'类别'
,
类别
::班级
,
'slug'
)
->
证实
([
'sku'
=>
'必填|字符串'
,
“产品名称”
=>
'required|string|min:3'
,]);}}
在您的系统中注册进口商
AppServiceProvider
使用该软件包的标签:
使用
LaravelIngest\IngestServiceProvider
;$this
->
应用程序
->
标签
([
产品进口商
::班级
],
摄取服务提供者
::
INGEST_DEFINITION_TAG
(英文):
运行导入
注册完成后,该软件包会为每个导入器公开一个 Artisan 命令和一个 HTTP 端点。
通过命令行界面:
php
工匠
摄取:运行
产品进口商
--file=products.csv
通过 API(多部分表单上传):
POST /api/v1/ingest/upload/product-importer
对于演练,请附加以下内容
--dry-run
向 Artisan 命令添加标志,以验证文件并显示任何错误,而无需触及数据库。
监控
该软件包包含多个 Artisan 命令,用于检查正在进行或已完成的导入:
php
工匠
摄取:列表
# 列出已注册的进口商php
工匠
摄取:状态
{
ID
}
# 显示进度和行统计信息php
工匠
摄入:取消
{
ID
}
# 停止正在进行的导入php
工匠
摄入:重试
{
ID
}
# 仅重新处理失败的行
同时还提供等效的 REST 端点:
GET /api/v1/ingest— 近期跑步GET /api/v1/ingest/{id}— 状态和统计数据GET /api/v1/ingest/{id}/errors/summary— 汇总误差细分GET /api/v1/ingest/{id}/failed-rows/download— 失败行的 CSV 文件
活动
该软件包会在整个导入生命周期中分发事件——
IngestRunStarted
,
ChunkProcessed
,
RowProcessed
,
IngestRunCompleted
, 和
IngestRunFailed
— 您可以监听通知或自定义副作用。
您可以在以下位置找到 Laravel Ingest: GitHub 并阅读完整文档。 Laravel Ingest 文档 。






