elliotghorbani / laravel-spreadsheet
从数据库导出并导入
Requires
- php: ^8.0
- ext-json: *
- illuminate/database: ^8.0
- illuminate/foundation: ^8.0
- illuminate/http: ^8.0
- illuminate/routing: ^8.0
- illuminate/support: ^8.0
- illuminate/validation: ^8.0
This package is auto-updated.
Last update: 2024-09-13 20:10:15 UTC
README
关于此包
此包允许您将数据库动态导出为CSV。
注意:尚未添加导入功能。
安装
composer require elliotghorbani/laravel-spreadsheet
php artisan vendor:publish --provider="ElliotGhorbani\LaravelSpreadsheet\SpreadsheetServiceProvider"
在生成的配置文件中,您可以在"spreadsheet_table"键下覆盖表名。
php artisan migrate
使用方法
-
向"/spreadsheet/tables"发送GET请求。它返回您的数据库中的所有表。
-
向"/spreadsheet/columns"发送带有参数"table_name"的POST请求。
{
"table_name": "users"
}
它返回指定表的所有列。然后您可以选择所需的列及其位置以包含在电子表格中。请参阅注意6。
- 向"/spreadsheet/filter-columns"发送带有参数"table_name"的POST请求。
{
"table_name": "users"
}
它返回可以过滤的指定表的所有列及其数据类型,以便您生成一个表单。请参阅注意7。
- 向"/spreadsheet"发送以下参数的POST请求。
{
"table_name": "users",
"export_data":
{
"columns": {"2": "id", "1": "email", "3": "username"},
"filters": [
{"column": "id", "operator": "<", "value": "60"}
]
},
"import_data": []
}
您所需的标准现在已创建在数据库中。因此,您可以稍后再次使用它。
- 向"/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许可。