【问题标题】:Silverstripe 3.1 - Export Dataobject with all relations?Silverstripe 3.1 - 导出所有关系的数据对象?
【发布时间】:2014-05-15 21:12:03
【问题描述】:

我需要导出数据对象的全部数据。数据库字段和关系。

private static $db = array (
    'URLSegment' => 'Varchar(255)',
    'SKU' => 'Text',
    'Title' => 'Text',
    'Price' => 'Text',
    'Content' => 'HTMLText',
    'ItemConfig' => 'Int',
    'Priority' => 'Int'
);

private static $has_one = array (
    'Visual' => 'Image'
);

private static $has_many = array (
    'Sizes' => 'ShopItem_Size',
    'Colors' => 'ShopItem_Color'
);

private static $many_many = array (
    'Visuals' => 'Image',
    'Categories' => 'ShopCategory'
);

我将所有内容添加到 getExportFields()。但正如预期的那样,关系的结果是“ManyManyList”或“HasManyList”

public function getExportFields() {
    return array(
        'SKU' => 'SKU',
        'Title' => 'Title',
        'Price' => 'Price',
        'Content' => 'Content',
        'ItemConfig' => 'ItemConfig',
        'Visual' => 'Visual',
        'Visuals' => 'Visuals',
        'Sizes' => 'Sizes',
        'Colors' => 'Colors',
        'Categories' => 'Categories'
    );
}

是否可以创建这样的导出?

提前谢谢你

【问题讨论】:

    标签: php csv export silverstripe


    【解决方案1】:

    您可以使用任何方法名称代替 exportFields 数组中的字段/关系名称。

    在你的ModelAdmin 班级中

    public function getExportFields() {
        return array(
            'SKU' => 'SKU',
            'Title' => 'Title',
            'CategoryNames' => 'Categories'
        );
    }
    

    并且只在DataObject 上有一个具有该名称的方法,将关系数据作为字符串返回:

    public function CategoryNames(){
    
        $catNames = array();
        foreach($this->Categories() as $cat){
            $catNames[] = $cat->getField('Title');
        }
    
        //use a separator that won't break the CSV file
        return join("; ", $catNames);
    
    }
    

    我认为这甚至比模型管理员在您的 CSV 文件中创建魔术字段要好得多,
    这会使它不一致...

    【讨论】:

      猜你喜欢
      • 2015-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      相关资源
      最近更新 更多