2017-07-26 70 views
1

我正在编写一个工匠命令,将数据库中的表导出为csv文件。 但是,当运行该命令时,CLI仅向我显示来自数据库的数据,并且不创建CSV文件。使用Laravel php artisan命令将数据库表导出为CSV

+0

有没有错误?你确定运行命令的用户有权执行此操作吗? – skido

+0

@ skido不,没有错误。是的,用户有权限。 – Trayer

+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'] 

顺便说一句的是$头阵的目的是什么?

CLI显示我只能从数据库

也许你已经DD()某处的数据?

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/

0

我发现我自己的解决方案。感谢你们!