SonataAdminBundle Exporter issue with mapped entities

后端 未结 1 1079
广开言路
广开言路 2021-01-14 16:02

There is a standard feature in sonata-admin-bundle to export data using exporter; But how to make export current entity AND mapped ManyToOne entity with it?

Basicall

相关标签:
1条回答
  • 2021-01-14 16:26

    I created own source iterator inherited from DoctrineORMQuerySourceIterator.

    If value in method getValue is array or instance of Traversable i call method getValue recursive to get value for each "Many" entity:

    protected function getValue($value)
    {
        //if value is array or collection, creates string 
        if (is_array($value) or $value instanceof \Traversable) {
            $result = [];
            foreach ($value as $item) {
               $result[] = $this->getValue($item);
            }
            $value = implode(',', $result);
        //formated datetime output    
        } elseif ($value instanceof \DateTime) {
            $value = $this->dateFormater->format($value);
        } elseif (is_object($value)) {
            $value = (string) $value;
        }
    
        return $value;
    }
    

    In your admin class you must override method getDataSourceIterator to return your own iterator.

    This

    $this->getModelManager()->getExportFields($this->getClass());
    

    returns all entity items. Better practice is to create explicit list of exported items in method getExportFields()

    public function getExportFields()
    {       
        return [
            $this->getTranslator()->trans('item1_label_text') => 'entityItem1', 
            $this->getTranslator()->trans('item2_label_text') => 'entityItem2.subItem', 
            //subItem after dot is specific value from related entity
    ....
    

    Key in array is used for export table headers (here is traslated).

    0 讨论(0)
提交回复
热议问题