Silverstripe 3.1一对一的关系

时间:2015-03-30 05:49:32

标签: silverstripe

使用以下示例在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中添加和编辑相关字段。

1 个答案:

答案 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';
}