CakePHP最强大的特性之一是能够提供的链接关系映射模型。在CakePHP中,模型通过协会之间的联系。
定义在应用程序中不同对象之间的关系应该是一个自然的过程。例如:在配方数据库,导致可能会有很多评论,评论有一个作者和作者可能会有很多食谱。定义这些关系的工作方式允许您以一种直观而强大的方式访问您的数据。
这里的目的是向您展示如何计划,定义,和利用在CakePHP模型之间的关联。
但以下不会在任何情况下工作得很好:
定义在应用程序中不同对象之间的关系应该是一个自然的过程。例如:在配方数据库,导致可能会有很多评论,评论有一个作者和作者可能会有很多食谱。定义这些关系的工作方式允许您以一种直观而强大的方式访问您的数据。
这里的目的是向您展示如何计划,定义,和利用在CakePHP模型之间的关联。
数据可以来自各种来源,最常见的形式存储在web应用程序是一个关系数据库。
关系类型
四个协会在CakePHP类型:具,hasMany,belongsTo,hasAndBelongsToMany(HABTM)。
协会是由创建一个类变量命名的协会定义。类变量有时可以简单如一个字符串,但可以完成作为一个多维数组用于定义关联的细节
class User extends AppModel {
public $hasOne = 'Profile';
public $hasMany = array(
'Recipe' => array(
'className' => 'Recipe',
'conditions' => array('Recipe.approved' => '1'),
'order' => 'Recipe.created DESC'
)
);
}
在上面的例子中,这个词的第一个实例“Recipe”是所谓的“Alias”。这是一个标识符,可以是任何你选择的关系。通常情况下,你会选择相同的名称作为它引用的类。然而,别名为每一个应用广泛的模型必须是惟一的。例如是适当的:
class User extends AppModel {
public $hasMany = array(
'MyRecipe' => array(
'className' => 'Recipe',
)
);
public $hasAndBelongsToMany = array(
'MemberOf' => array(
'className' => 'Group',
)
);
}
class Group extends AppModel {
public $hasMany = array(
'MyRecipe' => array(
'className' => 'Recipe',
)
);
public $hasAndBelongsToMany = array(
'Member' => array(
'className' => 'User',
)
);
}
但以下不会在任何情况下工作得很好:
class User extends AppModel {
public $hasMany = array(
'MyRecipe' => array(
'className' => 'Recipe',
)
);
public $hasAndBelongsToMany = array(
'Member' => array(
'className' => 'Group',
)
);
}
class Group extends AppModel {
public $hasMany = array(
'MyRecipe' => array(
'className' => 'Recipe',
)
);
public $hasAndBelongsToMany = array(
'Member' => array(
'className' => 'User',
)
);
}