【问题标题】:Silverstripe 3.1 one to one relationSilverstripe 3.1 一对一关系
【发布时间】:2015-06-03 01:18:53
【问题描述】:

使用以下示例在 Silverstripe 中管理 1:1 关系的最佳方法是什么。将 $db 字段添加到页面很容易,但是如果我想将其作为单独的数据对象进行维护,最好的方法是什么? (很多关于 1:many 的信息,但不是 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 中添加和编辑相关字段。

【问题讨论】:

    标签: silverstripe


    【解决方案1】:

    您可能正在寻找belongs_to

    定义与另一个对象的一对一关系,该对象声明该关系的另一端与一个 对应的 $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'
        );
    }
    

    编辑:

    根据您的评论和对问题的重新阅读,我猜您想要一种将 CarSpecs 与 CarPages 分开编辑的方法,在这种情况下,您正在寻找 ModelAdmin 类似的内容:

    <?php
    
    class CarSpecsAdmin extends ModelAdmin {
    
        private static $managed_models = array(
            'CarSpecs'
        );
    
        private static $url_segment = 'CarSpecs';
    
        private static $menu_title = 'Car Specs Admin';
    }
    

    【讨论】:

    • 那么在我的示例中,Car 数据库表中的 CarSpecsID 将与 CarSpecs 表中的 ID 相同?如果是这样,我如何在我的示例中编辑 CMS 字段,是否有 silverstripe 方法/函数来关联它,这里需要 gridfield 吗???那么新的Textfield可以知道这种关系吗???
    • 是的,您需要一个网格域来管理关系。看看这个页面:doc.silverstripe.org/en/tutorials/…silverstripe 现在有关于关系管理的视频教程,可以在这里找到silverstripe.org/learn/lessons
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多