nickschot / laracsv
一个Laravel包,可以轻松地从Eloquent模型生成CSV文件。
Requires
- php: >=5.6.4
- illuminate/database: >=5.2
- league/csv: >=8.2
Requires (Dev)
- fzaninotto/faker: ^1.6
- phpunit/phpunit: 5.7.*
This package is not auto-updated.
Last update: 2024-09-21 17:34:26 UTC
README
一个Laravel包,可以轻松地从Eloquent模型生成CSV文件。
基本用法
$users = User::get(); // All users $csvExporter = new \Laracsv\Export(); $csvExporter->build($users, ['email', 'name'])->download();
并且会下载一个包含 email
和 name
字段的合适CSV文件。
安装
只需在您的终端运行此命令
composer require "usmanhalalit/laracsv:1.*@dev"
然后您就可以继续了。
完整文档
构建CSV
$exporter->build($modelCollection, $fields)
接受两个参数。第一个参数是模型(模型集合),第二个参数接受您要导出的字段名。
$csvExporter->build(User::get(), ['email', 'name', 'created_at']);
输出选项
下载
要将文件下载到浏览器
$csvExporter->download();
您可以选择提供文件名
$csvExporter->download('active_users.csv');
您还可以抑制第一行(标题)
$csvExporter->build(User::get(), ['email', 'name', 'created_at'], false);
如果没有提供文件名,将生成一个包含日期时间的文件名。
高级输出
LaraCSV使用 League CSV。您可以执行League CSV所能执行的操作。您可以通过调用以下方法来获取底层的League CSV实例
$csv = $csvExporter->getCsv();
然后您可以执行多个操作,如
$csv->toHTML(); // To output the CSV as an HTML table $csv->jsonSerialize()(); // To turn the CSV in to an array $csv = (string) $csv; // To get the CSV as string echo $csv; // To print the CSV
有关更多信息,请参阅 League CSV文档。
自定义标题
上述代码示例将生成一个包含标题email、name、created_at以及相应的行的CSV文件。
如果您想用自定义标签更改标题,只需将其作为数组值传递
$csvExporter->build(User::get(), ['email', 'name' => 'Full Name', 'created_at' => 'Joined']);
现在 name
列将显示标题 Full Name
,但它仍然会从模型的 name
字段获取值。
修改或添加值
有一个在处理数据库行之前被触发的钩子。例如,如果您想更改日期格式,可以这样做。
$csvExporter = new \Laracsv\Export(); $users = User::get(); // Register the hook before building $csvExporter->beforeEach(function ($user) { $user->created_at = date('f', strtotime($user->created_at)); }); $csvExporter->build($users, ['email', 'name' => 'Full Name', 'created_at' => 'Joined']);
注意:如果 beforeEach
回调返回 false
,则整个行将被排除在CSV之外。这可以用来过滤一些行。
添加字段和值
您还可以添加不在数据库表中存在的字段,并动态添加值
// The notes field doesn't exist so values for this field will be blank by default $csvExporter->beforeEach(function ($user) { // Now notes field will have this value $user->notes = 'Add your notes'; }); $csvExporter->build($users, ['email', 'notes']);
模型关系
您还可以添加来自相关数据库表的字段到CSV中,前提是模型已经定义了关系。
这将获取产品标题和相关分类的标题(一对一)
$csvExporter->build($products, ['title', 'category.title']);
您也可以使用钩子按需修改关系
$products = Product::with('categories')->where('order_count', '>', 10)->orderBy('order_count', 'desc')->get(); $fields = ['id', 'title','original_price' => 'Market Price', 'category_ids',]; $csvExporter = new \Laracsv\Export(); $csvExporter->beforeEach(function ($product) { $product->category_ids = implode(', ', $product->categories->pluck('id')->toArray()); });
路线图
- 导入CSV