2014-09-17 3 views
0

В настоящее время я использую пакет sonata admin для экспорта данных «заказа», как я могу экспортировать данные со многими отношениями? Я видел post, это немного помогает, но я до сих пор не знаю, как получить данные во многих отношениях.SonataAdminBundle Exporter проблема со многими для многих

Вот мой код: функция getExportFields общественностью() {

return [ 
     $this->getTranslator()->trans('Order Number') => 'id', 
     $this->getTranslator()->trans('First Name') => 'customer.First_name', 
     $this->getTranslator()->trans('Last Name') => 'customer.Last_name', 
     ...] 

Вот это хорошо, но когда я пытаюсь получить «OrderToProduct» или «» Продукт.Название он не смог или только выходной пустая строка. Я потратил много времени на это уже, надеюсь, кто-то может дать ключ. Спасибо.

ответ

1

Ну, вы не можете использовать product.name, потому что продукт представляет собой коллекцию. Экспортное действие выполняет итерацию через объекты и получает свойства с определенным путем и пытается их укрепить.

Что вам нужно сделать, это обходной путь - определить какой-либо метод в классе Order - т.е. getProductsAsString(), сделать его вернуть строку вам нужно, а затем добавить

$this->getTranslator()->trans('Products') => 'productsAsString' 

Но все-таки - это поставит всю строку в одной ячейке xls, csv, xml, которую вы пытаетесь экспортировать.

+0

В ваших кодах упоминается: $ this-> getTranslator() -> trans ('Products') => 'productsAsString', означает ли 'productsAsString' метод getProductsAsString() или просто переменную? Я не совсем уверен, как соната работает со своими «дорожными» вещами, я все еще пытаюсь понять это. THX – GaryZ

+0

Могу ли я попросить еще одну вещь @tiriana, я получил несколько элементов в «продуктах», если захочу экспортировать их в файл csv, могу ли я сделать их одним элементом в строке? Потому что весь экспорт находится в одной строке, трудно прояснить взаимосвязь между номерами позиций и итогами в одной строке, лучше разбить на разные строки. Извините, что попросил слишком много, но, похоже, не так много людей используют эту инфраструктуру. THX – GaryZ

+0

О втором вопросе: Ну, всегда есть способ. Но есть простой способ сделать это с помощью встроенного экспортера Sonata, а не при экспорте заказов. Вам нужно будет экспортировать ассоциации OrderToProduct. Но я думаю, что такой способ потребует некоторого пользовательского экспорта, поэтому я бы не использовал этот встроенный. Вы можете написать свое собственное действие, чтобы экспортировать то, что вам нужно. И хотя вам нужно csv not xls, вам даже не нужно импортировать некоторые библиотеки 3party. Надеюсь, что это поможет. – tiriana