汇总字段中的 $many_many 关系

$many_many relation in summary fields

我有两个 class,它们之间有 $many_many$belongs_many_many 关系。我试图在包含 $many_many 的 class 中定义 $summary_fields 以显示 classes 之间的关系,但该列 ('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'
    );
}

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

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

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

以下代码是为 Silverstripe 3 编写的。

class Table1 extends DataObject
{
    private static $db = [
        'Title' => 'Varchar(32)',
    ];

    private static $many_many = [
        'Columns' => 'Table2',
    ];

    private static $field_labels = [
        'ColumnsString' => 'Columns',
    ];

    private static $summary_fields = [
        'Title',
        'ColumnsString',
    ];

    public function ColumnsString()
    {
        return implode(', ', $this->Columns()->column('Title'));
    }
}

class Table2 extends DataObject
{
    private static $db = [
        'Title' => 'Varchar(32)',
    ];

    private static $belongs_many_many = [
        'Columns' => 'Table1',
    ];
}