Silverstripe 3.1 - 与所有关系导出Dataobject?

时间:2014-05-15 21:12:03

标签: php csv export silverstripe

我需要导出数据对象的整个数据。数据库领域和关系。

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'
    );
}

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

提前谢谢

1 个答案:

答案 0 :(得分: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文件中创建魔术字段的modeladmin更好,
这会使它不一致......