我有两个类,它们之间有一个$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'
);
}
Run Code Online (Sandbox Code Playgroud)
问题是$many_many关系或$has_many关系可以链接到多个对象。我们不能将 a$many_many或$has_manyinto$summary_fields作为单行,因为 GridField 不知道如何显示多个项目。
例如,假设我们有Columns.Title哪里Columns是$many_many当前对象的关系。如果我们有三个Columns对象链接到当前对象,系统不知道要显示三列的标题。
我们可以做的是创建一个函数来返回一个字符串来显示我们想要显示的数据。
以下代码是为 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',
];
}
Run Code Online (Sandbox Code Playgroud)