APYDataGridBundle - 导出大量数据失败

时间:2017-01-05 10:20:30

标签: php symfony bundle

我必须将 50000 行从表格导出到Excel(或CSV)。将来,这将是百万甚至更多。导出功能是我选择此捆绑包的原因,但现在我发现这是一个错误。

当有超过几千行时,捆绑包就会失败。我认为这是因为内存限制。

我发现了这个:

public function computeData($grid)
    {
        $data = $this->getGridData($grid);

        $this->content = '<table border=1>';
        if (isset($data['titles'])) {
            $this->content .= '<tr>';
            foreach ($data['titles'] as $title) {
                $this->content .= sprintf("<th>%s</th>", htmlentities($title, ENT_QUOTES));
            }
            $this->content .= '</tr>';
        }

        foreach ($data['rows'] as $row) {
            $this->content .= '<tr>';
            foreach ($row as $cell) {
                $this->content .= sprintf("<td>%s</td>", htmlentities($cell, ENT_QUOTES));
            }
            $this->content .= '</tr>';
        }

        $this->content .= '</table>';
    }

似乎可以将所有数据同时转换为一个变量。

至少捆绑包允许创建自己的Export类。任何人都知道这个包如何允许例如逐页获取数据?我认为这应该足够了。我找不到任何方法来做到这一点。

1 个答案:

答案 0 :(得分:0)

我辞去了使用APY Grid的困扰,因为它的速度很慢,我想做的每一件事都很复杂。

所以我决定使用AngularJS构建表。我花了大约4个小时。现在看起来更好,更快。

使用我自己的功能我现在能够以我想要的方式导出数据。为此,我使用了StreamedResponse,这是我对本周的发现。我在每个页面之后对数据进行分页,清除实体管理器,并将逐页数据发送给接收方。不管脚本的阶段是什么,它使用的内存少于20MB。

它现在可以处理数十亿行。

因此,如果有人遇到同样的问题,我真的建议这样做:)