承接 usmanhalalit/laracsv 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

usmanhalalit/laracsv

Composer 安装命令:

composer require usmanhalalit/laracsv

包简介

A Laravel package to easily generate CSV files from Eloquent model.

README 文档

README

A Laravel package to easily generate CSV files from Eloquent model.

Build Status Total Downloads Daily Downloads

Basic usage

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

And a proper CSV file will be downloaded with email and name fields. As simple as it sounds!

Installation

Just run this on your terminal:

composer require usmanhalalit/laracsv:^2.1

and you should be good to go.

Full Documentation

Build CSV

$exporter->build($modelCollection, $fields) takes three parameters. First one is the model (collection of models), seconds one takes the field names you want to export, third one is config, which is optional.

$csvExporter->build(User::get(), ['email', 'name', 'created_at']);

Output Options

Download

To get file downloaded to the browser:

$csvExporter->download();

You can provide a filename if you wish:

$csvExporter->download('active_users.csv');

If no filename is given a filename with date-time will be generated.

Advanced Outputs

LaraCSV uses League CSV. You can do what League CSV is able to do. You can get the underlying League CSV writer and reader instance by calling:

$csvWriter = $csvExporter->getWriter();
$csvReader = $csvExporter->getReader();

And then you can do several things like:

$csvString = $csvWriter->getContent(); // To get the CSV as string
$csvReader->jsonSerialize(); // To turn the CSV in to an array

For more information please check League CSV documentation.

Custom Headers

Above code example will generate a CSV with headers email, name, created_at and corresponding rows after.

If you want to change the header with a custom label just pass it as array value:

$csvExporter->build(User::get(), ['email', 'name' => 'Full Name', 'created_at' => 'Joined']);

Now name column will show the header Full Name but it will still take values from name field of the model.

No Header

You can also suppress the CSV header:

$csvExporter->build(User::get(), ['email', 'name', 'created_at'], [
    'header' => false,
]);

Modify or Add Values

There is a hook which is triggered before processing a database row. For example, if you want to change the date format you can do so.

$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']);

Note: If a beforeEach callback returns false then the entire row will be excluded from the CSV. It can come handy to filter some rows.

Add fields and values

You may also add fields that don't exists in a database table add values on the fly:

// 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']);

Model Relationships

You can also add fields in the CSV from related database tables, given the model has relationships defined.

This will get the product title and the related category's title (one to one):

$csvExporter->build($products, ['title', 'category.title']);

You may also tinker relation things as you wish with hooks:

$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());
});

Build by chunks

For larger datasets, which can become more memory consuming, a builder instance can be used to process the results in chunks. Similar to the row-related hook, a chunk-related hook can be used in this case for e.g. eager loading or similar chunk based operations. The behaviour between both hooks is similar; it gets called before each chunk and has the entire collection as an argument. In case false is returned the entire chunk gets skipped and the code continues with the next one.


// Perform chunk related operations
$export->beforeEachChunk(function ($collection) {
    $collection->load('categories');
});

$export->buildFromBuilder(Product::select(), ['category_label']);

The default chunk size is set to 1000 results but can be altered by passing a different value in the $config passed to buildFromBuilder. Example alters the chunk size to 500.

// ...

$export->buildFromBuilder(Product::select(), ['category_label'], ['chunk' => 500]);

© Muhammad Usman. Licensed under MIT license.

usmanhalalit/laracsv 适用场景与选型建议

usmanhalalit/laracsv 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1.8M 次下载、GitHub Stars 达 609, 最近一次更新时间为 2017 年 04 月 19 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「csv」 「export」 「laravel」 「eloquent」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 usmanhalalit/laracsv 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 usmanhalalit/laracsv 我们能提供哪些服务?
定制开发 / 二次开发

基于 usmanhalalit/laracsv 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 1.8M
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 613
  • 点击次数: 13
  • 依赖项目数: 2
  • 推荐数: 0

GitHub 信息

  • Stars: 609
  • Watchers: 9
  • Forks: 58
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2017-04-19