表导出到csv文件

时间:2017-11-16 19:40:21

标签: php laravel csv

在laravel 5.5项目中,我想将一些表导出到csv文件,然后我得到这个http://www.maatwebsite.nl/laravel-excel/docs/export#export库 代码如:

$path = $directoriesArray[count($directoriesArray)-1];
Excel::create($filename, function($excel) use($dataArray) {
    $excel->sheet('file', function($sheet)  use($dataArray) {
        $sheet->fromArray( $dataArray );
    });
})->store('csv', $path)->export('csv');

我上传了1个文件,但我需要上传几个表格 到相关文件我循环运行导出功能 并且只上传第一个文件。是限制的 浏览器(我试过使用chrome,firefox)或者是否可以上传所有文件?

1)如果有办法将此csv文件写入磁盘而不上传?

2)如果有某种方法可以对输出数据进行缓冲(如ob_start)并手动将它们写入文件中?

3)如果还有其他工具可以做到这一点吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

决定是:

})->store('csv', $path);

没有

->export('csv')

:)

答案 1 :(得分:0)

我这样做了:

<?php


$tablesArray= [  // array of tables to export
    'settings',
    'groups',
    'users',
];
$now_label= '_1';//strftime('%Y-%m-%d_%H_%M_%S');
$directories= [ public_path('uploads'), public_path('uploads/csv') , public_path('uploads/csv/loan_dump_'.$now_label) ];// to which directory export files
foreach( $tablesArray as $next_key=>$next_table_name ) {  // all tables
    $columnListing= \Schema::getColumnListing( $next_table_name );  // table columns

    if ( $next_table_name == 'settings' ) {
        $dataRows = Settings::all();
    }
    if ( $next_table_name == 'groups' ) {
        $dataRows = Group::all();
    }
    if ( $next_table_name == 'users' ) {
        $dataRows = User::all();
    }
    if ($dataRows == null) {
        die("-1 XXZ INVALID DATA");
    }
    $dataRowsArray = $dataRows->toArray();

    $writeRowsArray= [];
    $row= 0;
    foreach( $dataRowsArray as $next_key=>$nextDataRow ) {
        if (!empty($nextDataRow['created_at'])) {
            $nextDataRow['created_at'] = $this->dateTimeToDbFormat($nextDataRow['created_at']);
        }
        if (!empty($nextDataRow['updated_at'])) {
            $nextDataRow['updated_at'] = $this->dateTimeToDbFormat($nextDataRow['updated_at']);
        }
        if ($row == 0) { // first row with keys/file headers
            $writeRowsArray[] = $nextDataRow;
        } else {
            $writeRowsArray[] = array_values($nextDataRow);
        }
        $row++;
    }
    $this->writeArrayToCsvFile($writeRowsArray, $next_table_name, $directories);

} // foreach( $tablesArray as $next_key=>$next_table_name ) {  // all tables

public function writeArrayToCsvFile(array $dataArray, string $filename, array $directoriesArray) : int
{
    self::createDir(  $directoriesArray  );
    $path = $directoriesArray[count($directoriesArray)-1];
    Excel::create($filename, function($excel) use($dataArray) {
        $excel->sheet('file', function($sheet)  use($dataArray) {
            $sheet->fromArray( $dataArray );
        });
    })->store('csv', $path)->export('csv');
    return 1;
}


?>

$ tablesArray数组中只有第一个文件导出ok。 如果要评论第一张表,那么下一张表就会上传,等等。

什么是奇怪的文件被上传两次:在$目录路径和&#34;下载&#34;目录(我在kubuntu下)。