Php 如何在Silverstripe CMS中下载大量的子对象作为CSV?

Php 如何在Silverstripe CMS中下载大量的子对象作为CSV?,php,silverstripe,Php,Silverstripe,我正在处理一个Silverstripe项目,该项目具有批处理>项目关系 一批最多可以有50000个项目 这就是关系的表述方式: class Item extends DataObject { private static $has_one = array( 'Batch' => 'Batch' ); class Batch extends DataObject { private static $has_many = array( 'Items'

我正在处理一个Silverstripe项目,该项目具有批处理>项目关系

一批最多可以有50000个项目

这就是关系的表述方式:

class Item extends DataObject {

  private static $has_one = array(
      'Batch' => 'Batch'
  );

class Batch extends DataObject {

  private static $has_many = array(
      'Items' => 'Item'
  );

class BatchAdmin extends ModelAdmin {

  private static $managed_models = array(
      'Batch',
      'Item'
  );
这使CMS用户能够以CSV形式从CMS下载所有项目

我正在努力解决两件事:

  • 如何确保大型下载不会因为内存/脚本时间不足等原因而失败

  • 如何向每个仅下载该批中作为CSV的项目的批添加“导出到CSV”按钮

  • 要将导出到CSV按钮添加到导出相关
    项目的
    批次
    ,我们将
    GridFieldExportButton
    添加到批次CMSFields:

    类批处理扩展数据对象{
    私有静态$has_many=数组(
    '项目'=>'项目'
    );
    公共函数getCMSFields(){
    $itemsConfig=GridFieldConfig_RelationEditor::create();
    $itemsConfig->addComponent(新的GridFieldExportButton());
    $itemsField=新网格字段(
    “项目”,
    “项目”,
    $this->Items(),
    $itemsConfig
    ); 
    $fields=新字段列表(
    $itemsField
    );
    返回$fields;
    }
    }
    
    不止你一个人:)太好了,谢谢你。我添加了这一行以防止脚本超时:ini\u set('max\u execution\u time',3600);