timsinakiran/filament-import

基于 konnco/filament-import,支持 Laravel 11,因为 Filament 3 默认导入器对基本用例来说毫无意义。

1.1 2024-08-15 05:59 UTC

This package is not auto-updated.

Last update: 2024-09-23 08:26:41 UTC


README

此包将使您轻松地从文件导入到模型,无需进行模板操作。

您只需拖放并匹配文件的字段和列,让魔法发生!

安装

您可以通过 composer 安装此包

composer require timsinakiran/filament-import

发布配置

如果您想手动进行设置,请发布现有配置。

php artisan vendor:publish --tag=filament-import-config

使用方法

将操作导入到 ListRecords 页面

use Konnco\FilamentImport\Actions\ImportAction;
use Konnco\FilamentImport\Actions\ImportField;

class ListCredentialDatabases extends ListRecords
{
    protected static string $resource = CredentialDatabaseResource::class;

    protected function getActions(): array
    {
        return [
            ImportAction::make()
                ->fields([
                    ImportField::make('project')
                        ->label('Project')
                        ->helperText('Define as project helper'),
                    ImportField::make('manager')
                        ->label('Manager'),
                ])
        ];
    }
}

所需字段

protected function getActions(): array
{
    return [
        ImportAction::make()
            ->fields([
                ImportField::make('project')
                    ->label('Project')
                    ->required(),
            ])
    ];
}

禁用批量创建

如果您仍然想坚持使用事件模型,可能需要此功能并关闭批量创建

protected function getActions(): array
{
    return [
        ImportAction::make()
            ->massCreate(false)
            ->fields([
                ImportField::make('project')
                    ->label('Project')
                    ->required(),
            ])
    ];
}

过滤空白行

如果您有一个包含空白数据的电子表格 点击这里查看更多,您可以过滤掉这些行

protected function getActions(): array
{
    return [
        ImportAction::make()
            ->handleBlankRows(true)
            ->fields([
                ImportField::make('project')
                    ->label('Project')
                    ->required(),
            ])
    ];
}

字段数据变异

您还可以在保存到模型之前从行电子表格中操作数据

protected function getActions(): array
{
    return [
        ImportAction::make()
            ->fields([
                ImportField::make('project')
                    ->label('Project')
                    ->mutateBeforeCreate(fn($value) => Str::of($value)->camelCase())
                    ->required(),
            ])
    ];
}

否则,您可以在数据插入数据库之前从字段操作数据并获取所有变异数据。

protected function getActions(): array
{
    return [
        ImportAction::make()
            ->fields([
                ImportField::make('email')
                    ->label('Email')
                    ->required(),
            ])->mutateBeforeCreate(function($row){
                $row['password'] = bcrypt($row['email']);

                return $row;
            })
    ];
}

还可以在数据插入数据库后操作数据

use Illuminate\Database\Eloquent\Model;

protected function getActions(): array
{
    return [
        ImportAction::make()
            ->fields([
                ImportField::make('email')
                    ->label('Email')
                    ->required(),
            ])->mutateAfterCreate(function(Model $model, $row){
                // do something with the model

                return $model;
            })
    ];
}

网格列

当然,您可以分割列网格以美化数据地图的外观

protected function getActions(): array
{
    return [
        ImportAction::make()
            ->fields([
                ImportField::make('project')
                    ->label('Project')
                    ->required(),
            ], columns:2)
    ];
}

JSON格式字段

我们还支持 JSON 格式字段,您可以在调用 make 函数时设置,并使用点注释分隔名称

protected function getActions(): array
{
    return [
        ImportAction::make()
            ->fields([
                ImportField::make('project.en')
                    ->label('Project In English')
                    ->required(),
                ImportField::make('project.id')
                    ->label('Project in Indonesia')
                    ->required(),
            ], columns:2)
    ];
}

静态字段数据

对于静态字段数据,您可以使用 Filament 的常用字段

use Filament\Forms\Components\Select;

protected function getActions(): array
{
    return [
        ImportAction::make()
            ->fields([
                ImportField::make('name')
                    ->label('Project')
                    ->required(),
                Select::make('status')
                    ->options([
                        'draft' => 'Draft',
                        'reviewing' => 'Reviewing',
                        'published' => 'Published',
                    ])
            ], columns:2)
    ];
}

唯一字段

如果您的模型应该是唯一的,您可以传递字段的名称,该字段将用于检查数据库中是否已存在该行。如果存在,则跳过该行(防止出现非唯一行的错误)

use Filament\Forms\Components\Select;

protected function getActions(): array
{
    return [
        ImportAction::make()
            ->uniqueField('email')
            ->fields([
                ImportField::make('email')
                    ->label('Email')
                    ->required(),
            ], columns:2)
    ];
}

验证

您可以对导入字段进行验证,有关可用验证的更多信息,请参阅 Laravel 文档

use Filament\Forms\Components\Select;

protected function getActions(): array
{
    return [
        ImportAction::make()
            ->fields([
                ImportField::make('name')
                    ->label('Project')
                    ->rules('required|min:10|max:255'),
            ], columns:2)
    ];
}

创建记录

您可以通过使用 handleRecordCreation 函数覆盖默认的记录创建闭包并放置自己的代码

use Filament\Forms\Components\Select;

protected function getActions(): array
{
    return [
        ImportAction::make()
            ->fields([
                ImportField::make('name')
                    ->label('Project')
                    ->rules('required|min:10|max:255'),
            ], columns:2)
            ->handleRecordCreation(function($data){
                return Post::create($data);
            })
    ];
}

测试

composer test

变更日志

请参阅 变更日志 了解最近更改的详细信息。

贡献

请参阅 贡献指南 了解详细信息。

安全漏洞

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