elliotghorbani/laravel-spreadsheet

从数据库导出并导入

0.1.1-alpha 2022-08-11 11:45 UTC

This package is auto-updated.

Last update: 2024-09-13 20:10:15 UTC


README

Total Downloads Latest Stable Version License

关于此包

此包允许您将数据库动态导出为CSV。

注意:尚未添加导入功能。

安装

composer require elliotghorbani/laravel-spreadsheet

php artisan vendor:publish --provider="ElliotGhorbani\LaravelSpreadsheet\SpreadsheetServiceProvider"

在生成的配置文件中,您可以在"spreadsheet_table"键下覆盖表名。

php artisan migrate

使用方法

  1. 向"/spreadsheet/tables"发送GET请求。它返回您的数据库中的所有表。

  2. 向"/spreadsheet/columns"发送带有参数"table_name"的POST请求。

{
    "table_name": "users"
}

它返回指定表的所有列。然后您可以选择所需的列及其位置以包含在电子表格中。请参阅注意6。

  1. 向"/spreadsheet/filter-columns"发送带有参数"table_name"的POST请求。
{
    "table_name": "users"
}

它返回可以过滤的指定表的所有列及其数据类型,以便您生成一个表单。请参阅注意7。

  1. 向"/spreadsheet"发送以下参数的POST请求。
{
    "table_name": "users",
    "export_data":
        {
            "columns": {"2": "id", "1": "email", "3": "username"},
            "filters": [
                {"column": "id", "operator": "<", "value": "60"}
            ]
        },
    "import_data": []
}

您所需的标准现在已创建在数据库中。因此,您可以稍后再次使用它。

  1. 向"/spreadsheet/export/{export}"发送GET请求。

返回包含应用了过滤器的所需列及其位置的CSV文件。

注意1:"/spreadsheet"是一个RESTful路由。

注意2:支持的操作符是"="、"!=", "<", ">", "<>"。最后一个操作符("<>")作为在之间。

{
    "table_name": "users",
    "export_data":
        {
            "columns": {"2": "id", "1": "email", "3": "username"},
            "filters": [
                {"column": "id", "operator": "<>", "value": ["60", "100"]}
            ]
        },
    "import_data": []
}

注意3:您可以在配置中添加中间件和前缀到该包的路由。

注意4:您可以在配置中更改CSV分隔符。

注意5:如果您想修改返回的行(例如取消设置或添加列),您可以在您的Eloquent模型中实现HasCustomExportRow接口并将其添加到配置文件中的"table_model_map"键*。

class User extends Authenticatable implements HasCustomExportRow
{
    public function getSpreadsheetExportRow(array $columns): array
    {
        $attributes = $this->attributes;
        unset($attributes['password']);

        if (array_search('full_name', $columns)) {
            $attributes['full_name'] = $this->people->first_name . ' ' . $this->people->last_name;
        }

        $result = [];
        foreach ($columns as $column) {
            $result[$column] = $attributes[$column];
        }

        return $result;
    }
}

注意6:如果您想取消设置列,以便用户无法请求它,您可以在您的Eloquent模型中实现HasCustomExportAvailableColumns接口。

class User extends Authenticatable implements HasCustomExportAvailableColumns
{
    public static function getSpreadsheetExportAvailableColumns(): array
    {
        $columns = Schema::getColumnListing('users');

        $passwordKey = array_search('password', $columns);
        unset($columns[$passwordKey]);

        $columns[] = 'full_name';

        return $columns;
    }
}

注意7:如果您想取消设置列,以便用户无法过滤它,您可以在您的Eloquent模型中实现HasCustomExportAvailableFilterColumns接口。

class User extends Authenticatable implements HasCustomExportAvailableFilterColumns
{
    public static function getSpreadSheetExportAvailableFilterColumns(): array
    {
        $columns = Schema::getColumnListing('users');

        $passwordKey = array_search('password, $columns);
        unset($columns[$passwordKey]);

        return $columns;
    }
}
    'table_model_map' => [
        //'Table Name' => 'Eloquent Model Class'
        'users' => 'App\Models\User\User',
    ],

贡献

感谢您考虑为Laravel Spreadsheet做出贡献!

许可

Laravel Spreadsheet是开源软件,许可证为MIT许可