在CodeIgniter Datamapper中设置一对一的正确方法

时间:2014-04-02 14:11:44

标签: php codeigniter codeigniter-datamapper

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

class Customer ... {

  public $has_one = array('address');

}

class Address ... {

  public $has_one = array('customer');

}

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

这是CI数据映射器一对一或零(父/子)关系的正确配置吗?

1 个答案:

答案 0 :(得分:0)

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

  

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

// 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'
    )
);