Я использую следующий код для вывода CSV, но при запуске я получаю пустой экран. в основном моя путаница с DoctrineORMQuerySourceIterator, так как я не понимаю, как правильно это использовать. Я предполагаю, что я должен перечислять имена свойств ????
Я использую экспортера сонаты:
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();
Параметр secound для DoctrineORMQuerySourceIterator
представляет собой массив имен свойств, таких как:
['Column name in the output' => 'fieldName', 'Something' => 'address.street']
Как вы можете видеть в исходном коде, на самом деле он использует компонент Property Accessor для доступа к данным (здесь вы можете найти больше примеров).
Если вы хотите экспортировать необработанные данные в db, я рекомендую использовать PDOStatementSourceIterator
или DoctrineDBALConnectionSourceIterator
поскольку они быстрее. Первый требует PDOStatement
а другой требует соединения, запроса и массива prameters (вы можете увидеть его в связанном исходном коде) в качестве параметров конструктора.
Рабочий пример с использованием 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();
Извините за задержку, прежде чем ответить на вашу проблему.