使用以下示例在Silverstripe中管理1:1关系的最佳方法是什么?将$ db字段添加到页面很容易,但是如果我想将它作为单独的Dataobject维护,那么最好的方法是什么? (很多关于1的信息:很多,但不是1:1)例如。
class CarSpecs extends Dataobject {
private static $db = array(
'Make' => 'Text',
'Model' => 'Text',
'ModelDescription' => 'Text',
'NumberOfSeats' => 'VarChar(20)',
'Price' => 'Currency'
}
class Car extends Page {
private static $has_one = array('CarSpecs' => 'CarSpecs');
}
Silverstripe自动将一个页面ID添加到Car中的数据库表中以查找CarSpecs,但在Carspecs中呢?如何在CMS中添加和编辑相关字段。
答案 0 :(得分:2)
您可能正在寻找belongs_to
定义与另一个对象的1对1关系,该对象用a声明关系的另一端
对应的$ has_one。将在具有的对象中创建名为<relationship-name>ID
的单个数据库列
$has_one
,但$ belongs_to本身不会创建数据库字段。该字段将保存对象的ID
声明$belongs_to
。
与$ has_many类似,点符号可用于显式指定引用此关系的$has_one
。
除非这种关系不明确,否则这不是强制性的。
<?php
class Team extends DataObject {
private static $has_one = array(
'Coach' => 'Coach'
);
}
class Coach extends DataObject {
private static $belongs_to = array(
'Team' => 'Team.Coach'
);
}
根据您的评论和重新阅读的问题,我猜你想要一种与CarPages分开编辑CarSpecs的方法,在这种情况下,你正在寻找ModelAdmin之类的东西:< / p>
<?php
class CarSpecsAdmin extends ModelAdmin {
private static $managed_models = array(
'CarSpecs'
);
private static $url_segment = 'CarSpecs';
private static $menu_title = 'Car Specs Admin';
}