摘要字段中的$ many_many关系

时间:2016-05-19 00:52:41

标签: php silverstripe

我有两个类,它们之间有$many_many$belongs_many_many关系。我尝试在包含$summary_fields的类中定义$many_many以显示类之间的关系,但该列(' Column2.Column2')显示空白结果。如何设置$summary_fields以正确显示此数据?

这是我的代码

class Table1 extends DataObject {

    private static $db = array(
        'Column1' => 'Varchar(32)'
    );

    private static $many_many = array (
        'Column2' => 'Table2'
    );

    private static $summary_fields = array (
        'Column1' => 'Column 1',
        'Column2.Column2' => 'Column 2'
    );
}

class Table2 extends DataObject {

    private static $db = array(
        'Column2' => 'Varchar(32)'
    );

    private static $belongs_many_many = array (
        'Column1' => 'Table1'
    );
}

1 个答案:

答案 0 :(得分:4)

问题是$many_many关系或$has_many关系可以链接到多个对象。我们无法将$many_many$has_many放入$summary_fields,因为GridField中的单行不知道如何显示多个项目。

例如,假设我们Columns.Title Columns与当前对象有$many_many关系。如果我们有三个Columns对象链接到当前对象,系统不知道显示三列的标题。

我们可以做的是创建一个函数来返回一个显示我们想要显示的数据的字符串。

class Table1 extends DataObject {

    private static $db = array(
        'Title' => 'Varchar(32)'
    );

    private static $many_many = array(
        'Columns' => 'Table2'
    );

    private static $field_labels = array(
        'ColumnsString' => 'Column'
    );

    private static $summary_fields = array(
        'Title',
        'ColumnsString'
    );

    public function ColumnsString() {
        $returnString = '';
        foreach ($this->Columns() as $column) {
            $returnString .= $column->Title . ' ';
        }
        return $returnString;
    }
}

class Table2 extends DataObject {

    private static $db = array(
        'Title' => 'Varchar(32)'
    );

    private static $belongs_many_many = array(
        'Columns' => 'Table1'
    );
}