使用Laravel php artisan命令将数据库表导出为CSV

时间:2017-07-26 13:09:46

标签: php laravel csv

我正在编写一个artisan命令,将我的数据库中的表导出为csv文件。 但是当我运行命令时,CLI只向我显示数据库中的数据,并且不会创建CSV文件。

2 个答案:

答案 0 :(得分:1)

这在我的laravel 5.4项目

中工作正常
public function handle()
{
    $filename = "logins.csv";

    $handle = fopen($filename, 'w');
    fputcsv($handle, array('customer_id', 'count', 'year', 'month', 'day', 'hour'));

    fputcsv($handle, array("row['customer_id']", "row['count']", "row['year']", "row['month']", "row['day']", "row['hour']"));

    fclose($handle);

    $headers = array(
        'Content-Type' => 'text/csv',
    );
}

在项目根目录

中创建文件 logins.csv
customer_id,count,year,month,day,hour
row['customer_id'],row['count'],row['year'],row['month'],row['day'],row['hour']

btw $ headers数组的目的是什么?

  

CLI仅向我显示数据库中的数据

也许你在某处有dd()?

答案 1 :(得分:1)

您可以尝试使用此库:https://github.com/box/spout

允许您像这样轻松创建CSV,XLSX,ODS文件:

use Box\Spout\Writer\WriterFactory;
use Box\Spout\Common\Type;

$writer = WriterFactory::create(Type::XLSX); // for XLSX files
//$writer = WriterFactory::create(Type::CSV); // for CSV files
//$writer = WriterFactory::create(Type::ODS); // for ODS files

$writer->openToFile($filePath); // write data to a file or to a PHP stream
//$writer->openToBrowser($fileName); // stream data directly to the browser

$writer->addRow($singleRow); // add a row at a time
$writer->addRows($multipleRows); // add multiple rows at a time

$writer->close();

您只需将行作为数组传递即可。

您可以在此处找到文档:http://opensource.box.com/spout/