定义一对一关系的关联与定义一对多关系的关联非常类似。接下来让我们看一个例子,了解如何在模型中定义一对一关系。首先假定我们有一个profiles表,并且profile表与author表之间的关系是一对一。为了确立这种关系,我们新建了一个带有author_id外键的profile表。
现在,在两个模型类Author和Profile中,我们需要为这种关系定义关联。在带有外键的表所对应模型中,我们需 要定义belongsTo关联,因此在Profile表中,我们需要定义belongsTo关联。另一方面,一个作者只能有一个关联的个人资料 ——为了在Author模型中定义这种关联,我们可以使用hasOne类型的关联
类似地,在Author模型中,我们需要定义一个$hasOne属性
var $hasOne = array(
'Profile' => array(
'className' => 'Profile',
)
);
另外,我们在Profile模型中也需要定义一个$belongsTo模型:
var $belongsTo = array(
'Profile' => array(
'className' => 'Author',
)
);
在”一对一“和”一对多“关系中,对应基础表有外键的模型使用belongsTo关联。这两种关系之间的唯一却别就是:在另一个模型中,一个是使用hasOne关联,另一个是使用hasMany类型的关联。
使用数组定义关联有另外一个好处——我们可以在关联数组中包含一些键值对关系做更多定义。Authors和books之间自定义的hasMany关联的形式如下:
var $hasMany = array(
'Book' => array(
'className' => 'Book',
'foreignKey' => 'author_id',
'conditions' => 'Book.status = 1',
'fields' => array('isbn', 'title'),
'order' => 'Book.released DESC',
)
);
接下来让我们看看如何使用这些键值对来操作关系。
【本文翻译仅为外语学习及阅读目的,原文作者个人观点与译者及译言网无关】