SilverStripe 4.0.0 GridFieldConfig_RelationEditor:在创建时向对象添加关系不起作用
SilverStripe 4.0.0 GridFieldConfig_RelationEditor: adding relations to an object on creation time doesn't work
我有两个不同的数据对象(StockExchangeShare 和 NewsArticle),它们 link 具有 many_many 关系。
在NewsArticle.php中:
private static $many_many = [
'Shares' => StockExchangeShare::class
];
在StockExchangeShare.php中:
private static $belongs_many_many = [
'NewsArticles' => NewsArticle::class
];
添加新的新闻文章时,用户应该能够link 将一些现有的证券交易所股票添加到新文章中。这应该使用带有配置 'GridFieldConfig_RelationEditor'.
的 GridField 来完成
目前,这仅在已创建新闻文章后有效。我无法通过网格字段将共享添加到新的(未保存的)文章中。这是错误消息:
E_RECOVERABLE_ERROR: 传递给 SilverStripe\ORM\DataList::subtract() 的参数 1 必须是 SilverStripe\ORM\DataList 的实例,给定的 SilverStripe\ORM\UnsavedRelationList 实例,在 [=31 中调用=].php 第 247 行
这是我用来创建网格字段的代码:
$gridFieldConfig = GridFieldConfig_RelationEditor::create();
$gridFieldConfig->removeComponentsByType(GridFieldAddNewButton::class);
$gridFieldConfig->getComponentByType(GridFieldAddExistingAutocompleter::class)->setSearchFields(array('name', 'tickerSymbol', 'isin', 'wpknr'));
$gridFieldConfig->getComponentByType(GridFieldAddExistingAutocompleter::class)->setResultsFormat('$name | $isin');
$fields->addFieldsToTab('Root.Main', [
GridField::create(
'Shares',
'Shares',
$this->Shares(),
$gridFieldConfig
),
]);
这是 SilverStripe 的问题还是我做错了什么?
这在 SilverStripe 3 中也是相同的行为。通常我所做的是在显示 GridField 之前检查记录是否已保存,否则添加一条消息,说明保存后记录可用。
public function updateCMSFields(FieldList $fields)
{
if (!$this->owner->isInDB()) {
$fields->addFieldToTab('Root.Main', LiteralField::create('Please note: you can modify relations when this item has been saved.'));
return;
}
// add your GridField now
}
我有两个不同的数据对象(StockExchangeShare 和 NewsArticle),它们 link 具有 many_many 关系。
在NewsArticle.php中:
private static $many_many = [
'Shares' => StockExchangeShare::class
];
在StockExchangeShare.php中:
private static $belongs_many_many = [
'NewsArticles' => NewsArticle::class
];
添加新的新闻文章时,用户应该能够link 将一些现有的证券交易所股票添加到新文章中。这应该使用带有配置 'GridFieldConfig_RelationEditor'.
的 GridField 来完成目前,这仅在已创建新闻文章后有效。我无法通过网格字段将共享添加到新的(未保存的)文章中。这是错误消息:
E_RECOVERABLE_ERROR: 传递给 SilverStripe\ORM\DataList::subtract() 的参数 1 必须是 SilverStripe\ORM\DataList 的实例,给定的 SilverStripe\ORM\UnsavedRelationList 实例,在 [=31 中调用=].php 第 247 行
这是我用来创建网格字段的代码:
$gridFieldConfig = GridFieldConfig_RelationEditor::create();
$gridFieldConfig->removeComponentsByType(GridFieldAddNewButton::class);
$gridFieldConfig->getComponentByType(GridFieldAddExistingAutocompleter::class)->setSearchFields(array('name', 'tickerSymbol', 'isin', 'wpknr'));
$gridFieldConfig->getComponentByType(GridFieldAddExistingAutocompleter::class)->setResultsFormat('$name | $isin');
$fields->addFieldsToTab('Root.Main', [
GridField::create(
'Shares',
'Shares',
$this->Shares(),
$gridFieldConfig
),
]);
这是 SilverStripe 的问题还是我做错了什么?
这在 SilverStripe 3 中也是相同的行为。通常我所做的是在显示 GridField 之前检查记录是否已保存,否则添加一条消息,说明保存后记录可用。
public function updateCMSFields(FieldList $fields)
{
if (!$this->owner->isInDB()) {
$fields->addFieldToTab('Root.Main', LiteralField::create('Please note: you can modify relations when this item has been saved.'));
return;
}
// add your GridField now
}