是否可以在 Silverstripe 中创建嵌套的 Dataobjects?我用$has_many 关系尝试了它,但是第一个没有显示第二个数据对象。
这可能吗?怎么样?
在 SilverStripe 中始终可以使用嵌套的 DataObjects。在 3.0 之前的任何版本中,只有界面不存在或非常糟糕,因为 3.0 你可以根据需要嵌套 GridFields,不仅一次,你可以嵌套n次。
n
嵌套数据对象没什么特别之处,它与从页面到数据对象的关系一样。关系可以是 has_many,另一侧是 has_one,另一侧是 many_many,。
这里有 has_many 的例子:
class TournamentPage extends Page { private static $has_many = array('Teams' => 'Team'); public function getCMSFields() { $fields = parent::getCMSFields(); $fields->addFieldToTab('Root', Tab::create('TeamsTab', 'List of Teams')); $fields->addFieldToTab('Root.TeamsTab', GridField::create('Teams', 'The Teams', $this->Teams(), GridFieldConfig_RecordEditor::create()); return $fields; } } class TournamentPage_Controller extends Page_Controller {} class Team extends DataObject { private static $db = array('Title' => 'Varchar'); private static $has_one = array('TournamentPage' => 'TournamentPage'); // to make has_many of TournamentPage work private static $has_many = array('Players' => 'Player'); public function getCMSFields() { $fields = FieldList::create(); $fields->push(TextField::create('Title', 'Team name'); $fields->push(GridField::create('Players', 'The Players', $this->Players(), GridFieldConfig_RecordEditor::create()); return $fields; } } class Player extends DataObject { private static $db = array('Title' => 'Varchar'); private static $has_one = array('Team' => 'Team'); // to make has_many of Team work private static $has_many = array('DopingProblems' => 'DopingProblem'); public function getCMSFields() { $fields = FieldList::create(); $fields->push(TextField::create('Title', 'Player name'); return $fields; } }
和模板:
// file: TournamentPage.ss <% loop $Teams %> Team: $Title<br> Number of Players in this Team: $Players.Count<br> <ul> <% loop $Players %> <li>Player name: $Title</li> <% end_loop %> </ul> <% end_loop %>
1 回答
在 SilverStripe 中始终可以使用嵌套的 DataObjects。在 3.0 之前的任何版本中,只有界面不存在或非常糟糕,因为 3.0 你可以根据需要嵌套 GridFields,不仅一次,你可以嵌套
n
次。嵌套数据对象没什么特别之处,它与从页面到数据对象的关系一样。关系可以是 has_many,另一侧是 has_one,另一侧是 many_many,。
这里有 has_many 的例子:
和模板: