【问题标题】:How to export an entity as a CSV in Symfony?如何在 Symfony 中将实体导出为 CSV?
【发布时间】:2014-01-15 00:51:32
【问题描述】:

我正在使用以下代码输出 CSV,但运行它时出现空白屏幕。基本上我的困惑在于 DoctrineORMQuerySourceIterator 因为我不明白如何正确使用它。我假设我必须列出属性名称????

我正在使用 Sonata Exporter:

https://github.com/sonata-project/exporter

<?php

$repository = $this->getDoctrine()->getRepository('MainReferralCaptureBundle:Referral');
$referrals = $repository->createQueryBuilder('r')->select('r.pLastName, r.pFirstName')->getQuery();

// $referrals2 = $referrals->getResult();
// var_dump($referrals2);

$data = array(
    0 => array('name' => 'Jack'),
    1 => array('name' => 'Jill')
);

// Pick a format to export to
$format = 'csv';

// Filename
$filename = 'referral.csv';

// Set Content-Type
$content_type = 'text/csv';

// Location to Export this to
$export_to = 'php://output';

// Data to export
$exporter_source = new \Exporter\Source\DoctrineORMQuerySourceIterator($referrals, array('pLastName, pFirstName'));

// Get an Instance of the Writer
$exporter_writer = '\Exporter\Writer\\' . ucfirst($format) . 'Writer';

$exporter_writer = new $exporter_writer($export_to);

// Set the right headers
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Description: File Transfer');
header('Content-type: ' . $content_type);
header('Content-Disposition: attachment; filename=' . $filename . ';');
header('Expires: 0');
header('Pragma: public');

// Export to the format
\Exporter\Handler::create($exporter_source, $exporter_writer)->export();

【问题讨论】:

    标签: php symfony export-to-csv


    【解决方案1】:

    DoctrineORMQuerySourceIterator 的第二个参数是一个属性名称数组,如下所示:

    ['Column name in the output' => 'fieldName', 'Something' => 'address.street']
    

    正如您在source code 中看到的,它实际上使用Property Accessor 组件来访问数据(您可以在那里找到更多示例)。

    如果您想从数据库中导出原始数据,我建议使用PDOStatementSourceIteratorDoctrineDBALConnectionSourceIterator,因为它们更快。前者需要一个PDOStatement,而另一个需要一个连接、一个查询和一个参数数组(您可以在链接的源代码中看到)作为构造函数参数。

    【讨论】:

    • 照你说的做了,我得到“未捕获的 PHP 异常 Symfony\Component\Debug\Exception\ContextErrorException: “警告:spl_object_hash() 期望参数 1 为 obj”
    【解决方案2】:

    使用 CsvWriter 的工作示例:

    $format = 'csv';
    $exportTo = 'php://output';
    $exporterWriter = '\Exporter\Writer\\' . ucfirst($format) . 'Writer';
    
    $data = $repository->createQueryBuilder('r')->getQuery();
    $fields = array('Last Name' => 'pLastName', 'First Name' => 'pFirstName');
    $source = new DoctrineORMQuerySourceIterator($data, $fields);
    $writer = new $exporterWriter($exportTo);
    
    Handler::create($source, $writer)->export();
    

    抱歉耽搁了回答您的问题。

    【讨论】:

      猜你喜欢
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-19
      • 1970-01-01
      • 2015-12-08
      • 1970-01-01
      相关资源
      最近更新 更多