askdkc/livewire-csv

快速简单地给你的 Laravel 模型添加导入大 CSV(和 TSV)数据的功能 / Laravel 中快速轻松地添加 CSV 导入功能(包括 TSV,并且支持大容量)的神奇工具🚀

v1.8.1 2024-04-05 08:19 UTC

README

Latest Version on Packagist GitHub Tests Action Status Total Downloads

日语ReadMe请在此处查看

关于此包

简介

Livewire CSV 包是在 Laravel livewire 上创建的,用于轻松处理导入的包。并且对原始 Codecourse 代码和包进行了一些错误修复。

csvimport

注意

此包使用数据库 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 之外的其他主键,例如 email,您需要删除默认的 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>

使用队列

此包在底层使用 队列PHP 生成器 来实现快速高效。

通过运行以下命令创建 batches 表

php artisan queue:batches-table

然后,运行迁移。

php artisan migrate

之后,设置队列的配置。前往 Laravel 队列文档 了解更多信息。

测试

composer test

变更日志

请参阅 CHANGELOG 了解最近的变化。

贡献

请参阅 CONTRIBUTING 了解详细信息。

安全漏洞

请查看 我们的安全策略 了解如何报告安全漏洞。

灵感

本包受 codecourse 视频系列的启发。如果你想了解此包是如何创建的,请务必查看此 视频系列

致谢

许可

MIT 许可证(MIT)。请参阅 许可文件 了解更多信息。