askdkc / livewire-csv
快速简单地给你的 Laravel 模型添加导入大 CSV(和 TSV)数据的功能 / Laravel 中快速轻松地添加 CSV 导入功能(包括 TSV,并且支持大容量)的神奇工具🚀
Requires
- php: ^8.0
- illuminate/contracts: ^9.0|^10.0
- league/csv: ^9.15.0
- livewire/livewire: ^2.10
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^6.0|^7.0
- nunomaduro/larastan: ^2.0
- orchestra/testbench: ^7.0|~8.15.0
- orchestra/testbench-core: ^7.0|~8.15.0
- pestphp/pest: ^1.21|^2.0
- pestphp/pest-plugin-laravel: ^1.1
- pestphp/pest-plugin-livewire: ^1.0
- phpstan/extension-installer: ^1.2
- phpunit/phpunit: ^9.5|^10.0
This package is auto-updated.
Last update: 2024-09-18 00:28:52 UTC
README
日语ReadMe请在此处查看
关于此包
简介
Livewire CSV 包是在 Laravel livewire 上创建的,用于轻松处理导入的包。并且对原始 Codecourse 代码和包进行了一些错误修复。
注意
此包使用数据库
UPSERT
命令来更新(或创建)您的数据。
有关详细信息,请参阅 CSV 导入组件 🫡
安装
您可以通过 composer 安装此包
composer require askdkc/livewire-csv
设置命令
您可以通过运行 livecsv-setup
命令来发布此包所需的迁移文件和配置文件。
php artisan livecsv-setup
此命令发布文件后,会提示您运行迁移。如果您想自己运行迁移,则只需回答“否”。否则,键入“是”以运行迁移。
此命令还会提示您星标此存储库。如果您不介意帮助我,请星标此存储库。(提前感谢)
将 use HasCsvImports
添加到您的 User 模型中
您需要实现 HasCsvImports 到您的 User 模型中。
打开 app/Models/User.php
并按照以下方式编辑
<?php namespace App\Models; use Laravel\Sanctum\HasApiTokens; use Illuminate\Notifications\Notifiable; use Askdkc\LivewireCsv\Concerns\HasCsvImports; // add ... class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable, HasCsvImports; // add HasCsvImports here
使用方法
CSV 导入组件
使用此包很简单。要将导入器实现到您的项目中,只需在 Blade 视图中包含以下组件即可。
<livewire:csv-importer :model="App\Models\YourModel::class" :columns-to-map="['id', 'name', 'email']" :required-columns="['id', 'name', 'email']" :column-labels="[ 'id' => 'ID', 'name' => 'Name', 'email' => 'Email Address', ]" :upsert-columns="['name', 'email']" // This is optional />
注意:为了使用
:upsert-columns
,您需要一个“主键”或“唯一”索引。如果不指定:upsert-columns
,导入器将默认使用id
列进行更新。如果您想使用其他列进行更新,如上面的示例,请向您的模型迁移中添加以下索引:
$table->unique(['name', 'email']);如果您想使用除
id
之外的其他主键,例如id
并向您的模型迁移中添加以下索引:// $table->id(); You need to remove or comment out this line because you cannot have multiple primary keys $table->string('email')->primary();
按钮组件
该组件底层使用 alpinejs
。要显示导入按钮,请包含 x-csv-button
组件。
<x-csv-button>Import</x-csv-button>
要设置按钮样式,请使用带有 Tailwind 工具类的 class
属性。
<x-csv-button class="rounded py-2 px-3 bg-indigo-500 ..." type="button" ....> {{ __('Import') }} </x-csv-button>
手动配置
如果您未使用 livecsv-setup
命令,请按照以下步骤手动配置包设置过程。
使用以下命令发布并运行迁移
php artisan vendor:publish --tag="livewire-csv-migrations"
php artisan migrate
Csv 导入使用 Queue Worker,因此您需要创建以下表格
php artisan queue:table php artisan queue:batches-table php artisan migrate
使用以下命令发布配置文件
php artisan vendor:publish --tag="livewire-csv-config"
以下是已发布配置文件的内容
return [ /* |-------------------------------------------------------------------------- | Default Layout |-------------------------------------------------------------------------- | | This package plans on supporting multiple CSS frameworks. | Currently, 'tailwindcss' is the default and only supported framework. | */ 'layout' => 'tailwindcss', /* |-------------------------------------------------------------------------- | Default File Type |-------------------------------------------------------------------------- | | If you change file_type to tsv, it can handle tsv files. | */ 'file_type' => 'csv', /* |-------------------------------------------------------------------------- | Default Set Delimiter |-------------------------------------------------------------------------- | | If you change Set Delimiter to file. | */ 'set_delimiter' => ',', /* |-------------------------------------------------------------------------- | Max Upload File Size |-------------------------------------------------------------------------- | | The default maximumum file size that can be imported by this | package is 100MB. If you wish to increase/decrease this value, | change the value in KB below. | */ 'file_upload_size' => 102400, ];
layout
选项用于选择您正在使用的 CSS 框架,当前仅支持 tailwindcss
。我们正在努力在未来实现其他 CSS 框架。
file_type
选项用于选择 CSV 或 TSV 文件。如果您的文件是 TSV 类型,请将此更改为 tsv
。
set_delimiter
选项用于选择 CSV 文件的分隔符。如果你的文件使用的是例如 ;
而不是 ,
,那么请将其更改为 ';'
。
file_upload_size
用于验证规则,并定义上传文件的最大大小。你也可以从 livewire 配置文件 中定义此值。
可选地,你可以使用以下方式发布视图
php artisan vendor:publish --tag="livewire-csv-views"
在使用此命令之前,请查看以下 部分。
在 TALL stack 项目中
如果你在一个 TALL Stack 项目中使用此包(Tailwindcss、Alpinejs、Laravel、Livewire),发布供应商视图以将 livewire-csv 包含到你的项目中。
php artisan vendor:publish --tag="csv-views"
然后编译你的资源。
npm run dev
在非 TALL Stack 项目中
如果你没有使用 TALL Stack,请使用 csv 指令
添加必要的样式和脚本。
<html> ... <head> ... @csvStyles </head> ... <footer> ... @csvScripts </footer> </html>
使用队列
通过运行以下命令创建 batches 表
php artisan queue:batches-table
然后,运行迁移。
php artisan migrate
之后,设置队列的配置。前往 Laravel 队列文档 了解更多信息。
测试
composer test
变更日志
请参阅 CHANGELOG 了解最近的变化。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全漏洞
请查看 我们的安全策略 了解如何报告安全漏洞。
灵感
本包受 codecourse 视频系列的启发。如果你想了解此包是如何创建的,请务必查看此 视频系列
致谢
- askdkc
- ousid 原始包创建者
- Alex Garrett-Smith 通过他的 Codecourse 介绍了这个应用程序。
如果你想深入学习,请订阅他的 Codecourse 系列(它真的很棒!)。 - 所有贡献者
许可
MIT 许可证(MIT)。请参阅 许可文件 了解更多信息。