康诺斯/丝杠导入


README

Screenshot of Login

丝杠插件,用于将CSV和XLS文件导入数据库

FILAMENT 2.x Packagist Downloads

Code Styles run-tests

此包将使您从文件导入模型变得更加容易,无需创建模板即可轻松完成。

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

安装

您可以通过composer安装此包

composer require konnco/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

更新日志

请参阅更新日志了解最近的变化。

贡献

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

安全漏洞

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