gpt4 book ai didi

Silverstripe $many_many 关系与关系上的一个属性

转载 作者:行者123 更新时间:2023-12-04 17:36:04 26 4
gpt4 key购买 nike

添加 many_many 关系时,很像银条指南中的项目与导师关系:

http://doc.silverstripe.org/framework/en/tutorials/5-dataobject-relationship-management

我想根据关系记录一个属性。因此,例如“事件” - 项目导师的是/否字段。但是导师可能对她相关的不同项目有不同的值(value)。

使用 Silverstripe 的内置工具实现这一目标的最佳方法是什么?

更新
在 IRC 的帮助下以及下面的答案。我离得更近了一点,有点不工作。我发现了这个:
https://github.com/chillu/silverstripe-framework/blob/c8136f5d4c8a37a4da274cd1c93907c0a2af86a7/docs/en/reference/grid-field.md
这似乎非常相关。

所以辩论页面有许多小组成员,他们可以对每次辩论进行不同的投票。

辩论页面.php

  private static $many_many = array(
'Panelists' => 'Panelist',
'RelationTags' => 'Tag'
);
public static $many_many_extraFields = array(
'Panelists' => array('Motion' => 'Boolean')
);




public function getCMSFields() {
.....
if($this->ID) {
$panelistFields = singleton('Panelist')->getCMSFields();
$panelistFields->addFieldToTab(
'Root.Main',
// Please follow the "ManyMany[<extradata-name>]" convention
new TextField('ManyMany[Motion]', 'Agree with Motion')
);
$config = GridFieldConfig_RelationEditor::create();
$config->getComponentByType('GridFieldDetailForm')->setFields($panelistFields);
$gridField = new GridField('Panelists', 'Panelists', $this->Panelists(), $config);
$fields->findOrMakeTab('Root.Panelists')->replaceField('Panelist', $gridField);
}
}

最佳答案

你可以用 $many_many_extraFields$many_many关系,像这样(我猜是在 Project 类上):

static $many_many = array(
'Mentors' => 'Mentor'
);

static $many_many_extraFields = array(
'Mentors' => array(
'Active' => 'Boolean'
)
);

然后对于每个项目,一个特定的导师可以是活跃的或不活跃的(你总是可以添加除 'Active' 之外的其他字段...)。

如果您正在使用 SS 3.1 您可以通过 GridField 轻松编辑这些额外的字段。与 GridFieldDetailForm成分:
function getCMSFields(){

--[snip]--

$detailFormFields = new FieldList();
$detailFormFields->push( new CheckBoxField(
'ManyMany[Active]',
'Is Mentor active?'
));
$detailFormFields->push( new TextField(
'SomeOtherField',
'Some other title'
));
$config = new GridFieldConfig_RelationEditor();
$config->getComponentByType('GridFieldDetailForm')->setFields($detailFormFields);

$f = new GridField('Mentors', 'Mentors', $this->Mentors(), $config);
//push() or addFieldToTab() $f to CMSFields

--[snip]--

}

文档在这里: http://doc.silverstripe.com/framework/en/3.1/reference/grid-field#customizing-detail-forms

在检索代码中的数据时,您可以使用 getExtraData($componentName, $itemID) ManyManyList上的方法检索这些额外的字段值:
http://api.silverstripe.org/3.1/source-class-ManyManyList.html#178-210

关于Silverstripe $many_many 关系与关系上的一个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17936817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com