swalbrun/filament-regex-import

此 Filament 插件将使您能够通过匹配列来导入文件,从而更新模型。

0.2.1 2023-06-08 13:22 UTC

README

Latest Version on Packagist GitHub Tests Action Status Total Downloads

此 Filament 插件将使您能够通过匹配列来导入文件,从而更新模型。

Page

Modal

安装

您可以通过 composer 安装此包

composer require swalbrun/filament-regex-import

使用 make 命令创建映射器

php artisan filament:make-filament-import-mapper UserMapper

您可以使用以下命令发布配置文件

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

这是已发布配置文件的内容

return [
    'accepted_mimes' => [
        'application/vnd.ms-excel',
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
        'text/csv',
        'text/plain',
        'csv',
    ],
    'mappers' => [
    ],
    'navigation_group' => 'Import',
];

您可以使用以下命令发布翻译文件

php artisan vendor:publish --tag="filament-regex-import-translations"

功能

通过配置的 regex 匹配标题列

匹配给定映射器的 regex 与模型列

 public function propertyMapping(): Collection
    {
        return collect([
            'name' => '/(user|first|last)?name)/i',
            'email' => '/(E(-|_)?)?Mail/i',
        ]);
    }

检测重叠的 regex

如果两个 regex 匹配相同的列,则失败。

通过唯一键更新模型

创建或更新模型,同时注意给定的唯一列

public function uniqueColumns(): array
    {
        return [
            'email',
        ];
    }

关联模型

调用关联找到的模型的钩子。如果所有钩子参数模型都已找到,则将调用钩子

public function relatingClosures(): Collection
    {
        return collect([
            fn (User $user, Role $role) => $user->roles()->saveMany([$role]),
            fn (User $user) => event(new UserImported($user)),
            // Only gets called if a user, role and post with the matching type has been found by import
            function (User $user, Role $role, Post $post)  {
                if ($role->is('user')) {
                    $user->post()->associate($post)->save();
                }
            };
        ]);
    }

测试

composer test

变更日志

请参阅 CHANGELOG 了解最近更改的详细信息。

贡献

请参阅 CONTRIBUTING 了解详细信息。

安全漏洞

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

致谢

许可

MIT 许可证(MIT)。有关更多信息,请参阅 许可文件