Silverstripe 两个连接表。如何管理?
我在SS3项目中有这种关系:Silverstripe 两个连接表。如何管理?,silverstripe,Silverstripe,我在SS3项目中有这种关系: 餐馆有很多菜 烹饪很多次 看起来很简单,但我似乎找不到任何方法来管理它。尝试了GridField和Listbox。这可能是SilverStripe的限制吗 谢谢你的任何线索! WilsonGridField是管理这种数据结构的完美工具,我每天都这样做 由于您的主题,我觉得有必要也提到这一点:它在这里不加入(好的,是的,ORM加入,但不包括餐厅和烹饪以及SubCuisine)。 下面的示例将做什么: 在单个餐厅上,它将显示美食的列表(网格字段),您可以在其中创建
- 餐馆有很多菜
- 烹饪很多次
WilsonGridField是管理这种数据结构的完美工具,我每天都这样做 由于您的主题,我觉得有必要也提到这一点:它在这里不加入(好的,是的,ORM加入,但不包括餐厅和烹饪以及SubCuisine)。
下面的示例将做什么:
- 在单个
上,它将显示餐厅
的列表(网格字段),您可以在其中创建新的或附加现有的美食
- 在单个
将显示菜单上
的列表(网格字段),您可以在其中创建新菜单或附加现有菜单子菜单
餐厅
是一个页面
,但如果它是一个正常的数据对象
,它也能正常工作。)
文件
Restaurant.php
:
/**
* @method ManyManyList Cuisines
*/
class Restaurant extends Page {
private static $many_many = array(
'Cuisines' => 'Cuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
$return = parent::getCMSFields();
$return->addFieldToTab('Root', Tab::create('Cuisines', 'The Cuisines'));
$return->addFieldToTab(
'Root.Cuisines',
GridField::create(
'Cuisines',
'The Cuisines this Restaurant offers',
$this->Cuisines(),
GridFieldConfig_RelationEditor::create()
)
);
return $return;
}
}
class Restaurant_Controller extends Page_Controller {
}
/**
* @property string Title
* @method ManyManyList SubCuisines
*/
class Cuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
private static $many_many = array(
'SubCuisines' => 'SubCuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
if ($this->isInDB()) {
$grid = GridField::create(
'SubCuisines',
'The Sub Cuisines of this Cuisines',
$this->SubCuisines(),
GridFieldConfig_RelationEditor::create()
);
} else {
// because this record is not saved to the DB yet, we have no ID, without ID there can be no many_many relation
$grid = ReadonlyField::create('SubCuisines', '', 'Sub Cuisines can be added after creating');
}
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
$grid,
));
}
}
/**
* @property string Title
*/
class SubCuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
/**
* @return FieldList
*/
public function getCMSFields() {
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
));
}
}
文件courine.php
:
/**
* @method ManyManyList Cuisines
*/
class Restaurant extends Page {
private static $many_many = array(
'Cuisines' => 'Cuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
$return = parent::getCMSFields();
$return->addFieldToTab('Root', Tab::create('Cuisines', 'The Cuisines'));
$return->addFieldToTab(
'Root.Cuisines',
GridField::create(
'Cuisines',
'The Cuisines this Restaurant offers',
$this->Cuisines(),
GridFieldConfig_RelationEditor::create()
)
);
return $return;
}
}
class Restaurant_Controller extends Page_Controller {
}
/**
* @property string Title
* @method ManyManyList SubCuisines
*/
class Cuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
private static $many_many = array(
'SubCuisines' => 'SubCuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
if ($this->isInDB()) {
$grid = GridField::create(
'SubCuisines',
'The Sub Cuisines of this Cuisines',
$this->SubCuisines(),
GridFieldConfig_RelationEditor::create()
);
} else {
// because this record is not saved to the DB yet, we have no ID, without ID there can be no many_many relation
$grid = ReadonlyField::create('SubCuisines', '', 'Sub Cuisines can be added after creating');
}
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
$grid,
));
}
}
/**
* @property string Title
*/
class SubCuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
/**
* @return FieldList
*/
public function getCMSFields() {
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
));
}
}
文件subguisine.php
:
/**
* @method ManyManyList Cuisines
*/
class Restaurant extends Page {
private static $many_many = array(
'Cuisines' => 'Cuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
$return = parent::getCMSFields();
$return->addFieldToTab('Root', Tab::create('Cuisines', 'The Cuisines'));
$return->addFieldToTab(
'Root.Cuisines',
GridField::create(
'Cuisines',
'The Cuisines this Restaurant offers',
$this->Cuisines(),
GridFieldConfig_RelationEditor::create()
)
);
return $return;
}
}
class Restaurant_Controller extends Page_Controller {
}
/**
* @property string Title
* @method ManyManyList SubCuisines
*/
class Cuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
private static $many_many = array(
'SubCuisines' => 'SubCuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
if ($this->isInDB()) {
$grid = GridField::create(
'SubCuisines',
'The Sub Cuisines of this Cuisines',
$this->SubCuisines(),
GridFieldConfig_RelationEditor::create()
);
} else {
// because this record is not saved to the DB yet, we have no ID, without ID there can be no many_many relation
$grid = ReadonlyField::create('SubCuisines', '', 'Sub Cuisines can be added after creating');
}
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
$grid,
));
}
}
/**
* @property string Title
*/
class SubCuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
/**
* @return FieldList
*/
public function getCMSFields() {
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
));
}
}
文件Restaurant.ss
(模板):
餐厅:$Title
菜系
- $Title
GridField是管理此类数据结构的完美工具,我每天都会这样做 由于您的主题,我觉得有必要也提到这一点:它在这里不加入(好的,是的,ORM加入,但不包括餐厅和烹饪以及SubCuisine)。
下面的示例将做什么:
- 在单个
上,它将显示餐厅
的列表(网格字段),您可以在其中创建新的或附加现有的美食
- 在单个
将显示菜单上
的列表(网格字段),您可以在其中创建新菜单或附加现有菜单子菜单
餐厅
是一个页面
,但如果它是一个正常的数据对象
,它也能正常工作。)
文件
Restaurant.php
:
/**
* @method ManyManyList Cuisines
*/
class Restaurant extends Page {
private static $many_many = array(
'Cuisines' => 'Cuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
$return = parent::getCMSFields();
$return->addFieldToTab('Root', Tab::create('Cuisines', 'The Cuisines'));
$return->addFieldToTab(
'Root.Cuisines',
GridField::create(
'Cuisines',
'The Cuisines this Restaurant offers',
$this->Cuisines(),
GridFieldConfig_RelationEditor::create()
)
);
return $return;
}
}
class Restaurant_Controller extends Page_Controller {
}
/**
* @property string Title
* @method ManyManyList SubCuisines
*/
class Cuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
private static $many_many = array(
'SubCuisines' => 'SubCuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
if ($this->isInDB()) {
$grid = GridField::create(
'SubCuisines',
'The Sub Cuisines of this Cuisines',
$this->SubCuisines(),
GridFieldConfig_RelationEditor::create()
);
} else {
// because this record is not saved to the DB yet, we have no ID, without ID there can be no many_many relation
$grid = ReadonlyField::create('SubCuisines', '', 'Sub Cuisines can be added after creating');
}
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
$grid,
));
}
}
/**
* @property string Title
*/
class SubCuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
/**
* @return FieldList
*/
public function getCMSFields() {
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
));
}
}
文件courine.php
:
/**
* @method ManyManyList Cuisines
*/
class Restaurant extends Page {
private static $many_many = array(
'Cuisines' => 'Cuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
$return = parent::getCMSFields();
$return->addFieldToTab('Root', Tab::create('Cuisines', 'The Cuisines'));
$return->addFieldToTab(
'Root.Cuisines',
GridField::create(
'Cuisines',
'The Cuisines this Restaurant offers',
$this->Cuisines(),
GridFieldConfig_RelationEditor::create()
)
);
return $return;
}
}
class Restaurant_Controller extends Page_Controller {
}
/**
* @property string Title
* @method ManyManyList SubCuisines
*/
class Cuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
private static $many_many = array(
'SubCuisines' => 'SubCuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
if ($this->isInDB()) {
$grid = GridField::create(
'SubCuisines',
'The Sub Cuisines of this Cuisines',
$this->SubCuisines(),
GridFieldConfig_RelationEditor::create()
);
} else {
// because this record is not saved to the DB yet, we have no ID, without ID there can be no many_many relation
$grid = ReadonlyField::create('SubCuisines', '', 'Sub Cuisines can be added after creating');
}
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
$grid,
));
}
}
/**
* @property string Title
*/
class SubCuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
/**
* @return FieldList
*/
public function getCMSFields() {
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
));
}
}
文件subguisine.php
:
/**
* @method ManyManyList Cuisines
*/
class Restaurant extends Page {
private static $many_many = array(
'Cuisines' => 'Cuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
$return = parent::getCMSFields();
$return->addFieldToTab('Root', Tab::create('Cuisines', 'The Cuisines'));
$return->addFieldToTab(
'Root.Cuisines',
GridField::create(
'Cuisines',
'The Cuisines this Restaurant offers',
$this->Cuisines(),
GridFieldConfig_RelationEditor::create()
)
);
return $return;
}
}
class Restaurant_Controller extends Page_Controller {
}
/**
* @property string Title
* @method ManyManyList SubCuisines
*/
class Cuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
private static $many_many = array(
'SubCuisines' => 'SubCuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
if ($this->isInDB()) {
$grid = GridField::create(
'SubCuisines',
'The Sub Cuisines of this Cuisines',
$this->SubCuisines(),
GridFieldConfig_RelationEditor::create()
);
} else {
// because this record is not saved to the DB yet, we have no ID, without ID there can be no many_many relation
$grid = ReadonlyField::create('SubCuisines', '', 'Sub Cuisines can be added after creating');
}
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
$grid,
));
}
}
/**
* @property string Title
*/
class SubCuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
/**
* @return FieldList
*/
public function getCMSFields() {
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
));
}
}
文件Restaurant.ss
(模板):
餐厅:$Title
菜系
- $Title
GridField是管理此类数据结构的完美工具,我每天都会这样做 由于您的主题,我觉得有必要也提到这一点:它在这里不加入(好的,是的,ORM加入,但不包括餐厅和烹饪以及SubCuisine)。
下面的示例将做什么:
- 在单个
上,它将显示餐厅
的列表(网格字段),您可以在其中创建新的或附加现有的美食
- 在单个
将显示菜单上
的列表(网格字段),您可以在其中创建新菜单或附加现有菜单子菜单
餐厅
是一个页面
,但如果它是一个正常的数据对象
,它也能正常工作。)
文件
Restaurant.php
:
/**
* @method ManyManyList Cuisines
*/
class Restaurant extends Page {
private static $many_many = array(
'Cuisines' => 'Cuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
$return = parent::getCMSFields();
$return->addFieldToTab('Root', Tab::create('Cuisines', 'The Cuisines'));
$return->addFieldToTab(
'Root.Cuisines',
GridField::create(
'Cuisines',
'The Cuisines this Restaurant offers',
$this->Cuisines(),
GridFieldConfig_RelationEditor::create()
)
);
return $return;
}
}
class Restaurant_Controller extends Page_Controller {
}
/**
* @property string Title
* @method ManyManyList SubCuisines
*/
class Cuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
private static $many_many = array(
'SubCuisines' => 'SubCuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
if ($this->isInDB()) {
$grid = GridField::create(
'SubCuisines',
'The Sub Cuisines of this Cuisines',
$this->SubCuisines(),
GridFieldConfig_RelationEditor::create()
);
} else {
// because this record is not saved to the DB yet, we have no ID, without ID there can be no many_many relation
$grid = ReadonlyField::create('SubCuisines', '', 'Sub Cuisines can be added after creating');
}
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
$grid,
));
}
}
/**
* @property string Title
*/
class SubCuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
/**
* @return FieldList
*/
public function getCMSFields() {
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
));
}
}
文件courine.php
:
/**
* @method ManyManyList Cuisines
*/
class Restaurant extends Page {
private static $many_many = array(
'Cuisines' => 'Cuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
$return = parent::getCMSFields();
$return->addFieldToTab('Root', Tab::create('Cuisines', 'The Cuisines'));
$return->addFieldToTab(
'Root.Cuisines',
GridField::create(
'Cuisines',
'The Cuisines this Restaurant offers',
$this->Cuisines(),
GridFieldConfig_RelationEditor::create()
)
);
return $return;
}
}
class Restaurant_Controller extends Page_Controller {
}
/**
* @property string Title
* @method ManyManyList SubCuisines
*/
class Cuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
private static $many_many = array(
'SubCuisines' => 'SubCuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
if ($this->isInDB()) {
$grid = GridField::create(
'SubCuisines',
'The Sub Cuisines of this Cuisines',
$this->SubCuisines(),
GridFieldConfig_RelationEditor::create()
);
} else {
// because this record is not saved to the DB yet, we have no ID, without ID there can be no many_many relation
$grid = ReadonlyField::create('SubCuisines', '', 'Sub Cuisines can be added after creating');
}
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
$grid,
));
}
}
/**
* @property string Title
*/
class SubCuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
/**
* @return FieldList
*/
public function getCMSFields() {
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
));
}
}
文件subguisine.php
:
/**
* @method ManyManyList Cuisines
*/
class Restaurant extends Page {
private static $many_many = array(
'Cuisines' => 'Cuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
$return = parent::getCMSFields();
$return->addFieldToTab('Root', Tab::create('Cuisines', 'The Cuisines'));
$return->addFieldToTab(
'Root.Cuisines',
GridField::create(
'Cuisines',
'The Cuisines this Restaurant offers',
$this->Cuisines(),
GridFieldConfig_RelationEditor::create()
)
);
return $return;
}
}
class Restaurant_Controller extends Page_Controller {
}
/**
* @property string Title
* @method ManyManyList SubCuisines
*/
class Cuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
private static $many_many = array(
'SubCuisines' => 'SubCuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
if ($this->isInDB()) {
$grid = GridField::create(
'SubCuisines',
'The Sub Cuisines of this Cuisines',
$this->SubCuisines(),
GridFieldConfig_RelationEditor::create()
);
} else {
// because this record is not saved to the DB yet, we have no ID, without ID there can be no many_many relation
$grid = ReadonlyField::create('SubCuisines', '', 'Sub Cuisines can be added after creating');
}
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
$grid,
));
}
}
/**
* @property string Title
*/
class SubCuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
/**
* @return FieldList
*/
public function getCMSFields() {
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
));
}
}
文件Restaurant.ss
(模板):
餐厅:$Title
菜系
- $Title
GridField是管理此类数据结构的完美工具,我每天都会这样做 由于您的主题,我觉得有必要也提到这一点:它在这里不加入(好的,是的,ORM加入,但不包括餐厅和烹饪以及SubCuisine)。
下面的示例将做什么:
- 在单个
上,它将显示餐厅
的列表(网格字段),您可以在其中创建新的或附加现有的美食
- 在单个
将显示菜单上
的列表(网格字段),您可以在其中创建新菜单或附加现有菜单子菜单
餐厅
是一个页面
,但如果它是一个正常的数据对象
,它也能正常工作。)
文件
Restaurant.php
:
/**
* @method ManyManyList Cuisines
*/
class Restaurant extends Page {
private static $many_many = array(
'Cuisines' => 'Cuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
$return = parent::getCMSFields();
$return->addFieldToTab('Root', Tab::create('Cuisines', 'The Cuisines'));
$return->addFieldToTab(
'Root.Cuisines',
GridField::create(
'Cuisines',
'The Cuisines this Restaurant offers',
$this->Cuisines(),
GridFieldConfig_RelationEditor::create()
)
);
return $return;
}
}
class Restaurant_Controller extends Page_Controller {
}
/**
* @property string Title
* @method ManyManyList SubCuisines
*/
class Cuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
private static $many_many = array(
'SubCuisines' => 'SubCuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
if ($this->isInDB()) {
$grid = GridField::create(
'SubCuisines',
'The Sub Cuisines of this Cuisines',
$this->SubCuisines(),
GridFieldConfig_RelationEditor::create()
);
} else {
// because this record is not saved to the DB yet, we have no ID, without ID there can be no many_many relation
$grid = ReadonlyField::create('SubCuisines', '', 'Sub Cuisines can be added after creating');
}
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
$grid,
));
}
}
/**
* @property string Title
*/
class SubCuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
/**
* @return FieldList
*/
public function getCMSFields() {
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
));
}
}
文件courine.php
:
/**
* @method ManyManyList Cuisines
*/
class Restaurant extends Page {
private static $many_many = array(
'Cuisines' => 'Cuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
$return = parent::getCMSFields();
$return->addFieldToTab('Root', Tab::create('Cuisines', 'The Cuisines'));
$return->addFieldToTab(
'Root.Cuisines',
GridField::create(
'Cuisines',
'The Cuisines this Restaurant offers',
$this->Cuisines(),
GridFieldConfig_RelationEditor::create()
)
);
return $return;
}
}
class Restaurant_Controller extends Page_Controller {
}
/**
* @property string Title
* @method ManyManyList SubCuisines
*/
class Cuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
private static $many_many = array(
'SubCuisines' => 'SubCuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
if ($this->isInDB()) {
$grid = GridField::create(
'SubCuisines',
'The Sub Cuisines of this Cuisines',
$this->SubCuisines(),
GridFieldConfig_RelationEditor::create()
);
} else {
// because this record is not saved to the DB yet, we have no ID, without ID there can be no many_many relation
$grid = ReadonlyField::create('SubCuisines', '', 'Sub Cuisines can be added after creating');
}
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
$grid,
));
}
}
/**
* @property string Title
*/
class SubCuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
/**
* @return FieldList
*/
public function getCMSFields() {
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
));
}
}
文件subguisine.php
:
/**
* @method ManyManyList Cuisines
*/
class Restaurant extends Page {
private static $many_many = array(
'Cuisines' => 'Cuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
$return = parent::getCMSFields();
$return->addFieldToTab('Root', Tab::create('Cuisines', 'The Cuisines'));
$return->addFieldToTab(
'Root.Cuisines',
GridField::create(
'Cuisines',
'The Cuisines this Restaurant offers',
$this->Cuisines(),
GridFieldConfig_RelationEditor::create()
)
);
return $return;
}
}
class Restaurant_Controller extends Page_Controller {
}
/**
* @property string Title
* @method ManyManyList SubCuisines
*/
class Cuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
private static $many_many = array(
'SubCuisines' => 'SubCuisine',
);
/**
* @return FieldList
*/
public function getCMSFields() {
if ($this->isInDB()) {
$grid = GridField::create(
'SubCuisines',
'The Sub Cuisines of this Cuisines',
$this->SubCuisines(),
GridFieldConfig_RelationEditor::create()
);
} else {
// because this record is not saved to the DB yet, we have no ID, without ID there can be no many_many relation
$grid = ReadonlyField::create('SubCuisines', '', 'Sub Cuisines can be added after creating');
}
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
$grid,
));
}
}
/**
* @property string Title
*/
class SubCuisine extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
);
/**
* @return FieldList
*/
public function getCMSFields() {
return FieldList::create(array(
TextField::create('Title', 'Name of Cuisine'),
));
}
}
文件Restaurant.ss
(模板):
餐厅:$Title
菜系
- $Title
在我们关于IRC的对话之后,我们提出了以下替代解决方案,我将在这里发布以供记录 此解决方案与原始答案类似,但有不同之处