nickschot/laracsv

一个Laravel包,可以轻松地从Eloquent模型生成CSV文件。

1.0.0 2018-07-05 09:05 UTC

This package is not auto-updated.

Last update: 2024-09-21 17:34:26 UTC


README

一个Laravel包,可以轻松地从Eloquent模型生成CSV文件。

Build Status

基本用法

$users = User::get(); // All users
$csvExporter = new \Laracsv\Export();
$csvExporter->build($users, ['email', 'name'])->download();

并且会下载一个包含 emailname 字段的合适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