我怎么能返回有许多数据汇总字段Silverstripe?



我试图从项目详细信息表中获取项目名称数据正在获取和项目id保存在时间轴表中但是我不能在摘要字段中设置产品名称如果有人有解决方案,请帮助我。提前感谢!

这段代码有语法问题吗?像有很多,有一个,很多很多?

这些是我的代码

ProjectTimeline.php

class ProjectTimeline extends DataObject {
private static $table_name = 'ProjectTimeline';
private static $db = [
'Title' => "Varchar(255)",
'ProjectId' => "Varchar(255)"
];
private static $has_one = [
'ProjectPage' => ProjectPage::class

];
private static $has_many =[
'ProjectDetails'=>ProjectDetails::class
];
/**
* Data Listing Fields
*/
private static $summary_fields = [
'ProjectDetails.ProjectName' => 'Project Name',
'Title' => 'Title'
];
private static $extensions = [
Versioned::class,
];
private static $versioned_gridfield_extensions = true;
/**
* getCMSFields
* Projects - Amenities Form Fields 
*
* @return void
*/
public function getCMSFields()
{
return new FieldList(
DropdownField::create('ProjectId', 'Link a Product', ProjectDetails::get()->map('ID', 'ProjectName')),
TextField::create('Title')
);
}
/**
* Search Fields
*/
private static $searchable_fields = [
'Title'
];
/**
* getCMSValidator - Required Fields
*
* @return void
*/
public function getCMSValidator()
{
return new RequiredFields([
'Title'
]);
}

ProjectDetails.php

private static $has_one = [
'ProjectPage' => ProjectPage::class,
'QuickFactsImage' => Image::class,
'ProjectTimeline' => ProjectTimeline::class
];
private static $many_many = [
'ProjectImage' => Image::class,
'FloorTypesImage' => Image::class

];

不幸的是,这不是内置到Silverstripe。has_many关系将返回一个HasManyList,它是DataList的一个子类。你需要在ProjectTimeline DataObject中提供一个getter方法来遍历该列表并连接项目名称,如:

public function getProjectDetailsNames()
{
$names = $this->ProjectDetails()->column('ProjectName'); //returns just that column as an array
return implode(', ' $names);
}

那么您可以在summary_fields:

中使用此方法:
private static $summary_fields = [
'getProjectDetailsNames' => 'Project Names',
'Title' => 'Title'
];

我希望这有助于你解决那个问题!

最新更新