【问题标题】:Proper Method For Setting Up One-to-One in CodeIgniter Datamapper在 CodeIgniter Datamapper 中设置一对一的正确方法
【发布时间】:2014-04-02 14:11:44
【问题描述】:

我正在审查我的所有模型和 CodeIgniter Datamapper 的对应表。我想知道与定义的父母和孩子建立一对一关系的正确方法是什么。我一直这样做的方式是这样的:

class Customer ... {

  public $has_one = array('address');

}

class Address ... {

  public $has_one = array('customer');

}

客户是父级(即,有一个或零个地址),地址是子级(总是有一个客户)。在数据库中,我有一个不为空的地址上的 customer_id,索引并与 customer.id 关联并在 update 和 delete 时设置为 CASCADE,并且在客户上的 address_id 为空并与 address.id 关联并在更新时设置为 NO ACTION并删除。

这是 CI Datamapper 一对一或零(父/子)关系的正确配置吗?

【问题讨论】:

    标签: php codeigniter codeigniter-datamapper


    【解决方案1】:

    FAQ section of the docs中有很好的解释:

    在配置关系时,即使是自我关系,您也必须定义关系的“双方”。这意味着对于父/子关系,您必须在子级上指定父级,并且必须在父级上指定子级。 下面是一个复杂的自我关系的例子[用户(作为老板)有很多员工,员工有一个老板]:

    // In User
    $has_one = array(
        // define the relationship to the boss
        'boss' => array(
            'class' => 'user',
            'other_field' => 'employee'
        )
    );
    
    $has_many = array(
        // define the relationship to the employees
        'employee' => array(
            'class' => 'user',
            'other_field' => 'boss'
        )
    );
    

    【讨论】:

    • 感谢您的链接,但我不确定它如何回答我的问题 - 我如何告诉 DM 哪个是父母,哪个是孩子?
    • 模型不关心谁是父母/孩子......也许你想使用Nested Sets Extension
    • 谢谢,这很有趣。巧合的是,我使用 'report_to' 结构在 DM 中使用自引用关系来在我的应用程序的其他地方实现相同类型的事情。但这对于这个特殊用途来说太多了——我只想定义一个父级。但看起来我可以使用约束和诸如此类的东西把它留给我的 RMDBS。感谢您抽出宝贵时间提供帮助。
    猜你喜欢
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多