Mysql Query с несколькими соединениями в Excel в Symfony Admin - PullRequest
2 голосов
/ 17 октября 2011

Я создал красивое приложение регистрации для регистрации новых пользователей на событие.

Сейчас я хочу создать экспорт в Excel всех участников из серверной части, созданной администратором.

На данный момент я написал немного SQL-кода, который дает мне точную таблицу, которая мне нужна:

select 
CONCAT(p.first_name,' ',p.last_name) as "Registered User",
p.email_address as "Register Email",
p.country as "Register Country",
t.name as "Attendee Type" ,
CONCAT(a.first_name, ' ',a.last_name) as "Attendee",
CONCAT(disc.name, ' ',disc.sex) as "Discipline",
CONCAT(divi.category, ' ', divi.weight) as "Division",
a.sex as "Sex",
a.club_name as "Club Name",
a.accomodation as "Accommodation",
a.`sharing_with1` as "Sharing With A",
a.`sharing_with2` as "Sharing With B",
a.`flight_number` as "Flight Number",
a.`flight_datetime` as "Flight Date",
a.`flight_time` as "Flight Time",
if(a.visa > 0, 'Yes', 'No') as "Visa",
a.dob as "Date of Birth",
a.passport as "Passport",
a.`expiry_date` as "Passport Expiry"

from `profile` p, `type` t,

`attendee` AS a LEFT JOIN `division` AS divi ON (a.division_id = `divi`.id) 
LEFT JOIN discipline AS disc ON (divi.discipline_id = disc.id)

where a.profile_id = p.id
 AND a.type_id = t.id 

Как вы можете видеть, существует несколько стандартных и внешних объединений.

Я также понимаю, что могу в шаблоне создать обычную таблицу HTML с данными и изменить заголовки файлов, чтобы определить ее как файл Excel ... Пользователь загружает и открывает файл в Excel и никогда не знает разницы.

То, что я хочу знать, это;исходя из того, что у меня есть, например, sql и план вывода, каков наилучший способ наилучшим образом использовать Symfony для этого?

Примечание: Symfony 1.4 с Doctrine.

1 Ответ

0 голосов
/ 20 октября 2011

Я думаю, что CSV также хороший вариант, CSV-файл можно открыть в Excel.

В любом случае, вы можете создать новое действие в вашем модуле. Я предлагаю вам добавить его к параметрам действий (будет отображаться с помощью кнопки «новая запись»).

В вашем действии вы просто должны выполнить свой запрос:

$this->dbh = Doctrine_Manager::getInstance()->getConnection('doctrine');
$stmt = $this->dbh->prepare($query);
$stmt->execute();
$stmt->fetchAll();

Вы можете добавить нужные заголовки ответа следующим образом:

$this->getResponse()->setHttpHeader('Content-Type', 'application/poney/excel');

Если вы хотите, вы можете обойти шаблон:

return $this->renderText($html);

Полезно, если вы пытаетесь обслуживать CSV \ o /

...