CakePHP 提供关联数据表间的映射,共有4种类型的关联:
hasOne,hasMany,belongTo,hasAndBelongsToMany.
设定了Model间的关联关系定义,CakePHP就会将基于关系数据库的数据映射为基于对象的关系模型。
但是你应该确保遵循CakePHP的命名规则.
命名规则中需要考虑的3个内容是,外键,model名字,表名.
外键:单数形式的 modelName_id
表名:复数形式的 model名
Model名:驼峰法命名单数形式(见文件inflector.php).
hasOne 关联的定义与查询:通过在model中增加一个array来实现.
class User extends AppModel
{
var $name = 'User';
var $hasOne = array(
'UserInfos' => array(
'className' => 'UserInfos',
'conditions' => '',
'order'=> '',
'dependent' => true,
'foreignKey' => 'user_id'
)
);
}
$hasOne 变量是一个array,CakePHP 通过该变量来构建 Blog 与 User 之间的关联。
className: 关联对象的类名。
conditions: 关联对象的选择条件。
order: 关联对象的排列方式。
dependent: 这是个布尔值,如果为 true,父对象删除时会级联删除关联子对象。
foreignKey: 指向关联 Model 的外键字段名,仅在不遵循 Cake 的命名约定时需要设置。
belongsTo 关联的定义与使用
class Blog extends AppModel
{
var $name = 'Blog';
var $belongsTo = array(
'User' => array(
'className' => 'User',
'conditions' => '',
'order' => '',
'foreignKey' => 'user_id'
)
);
}
className: 关联对象的类名。
conditions: SQL 条件子句以限定关联的对象。
order: 关联对象的排序子句。
foreignKey: 关联对象所对应的外键字段名。
hasMany 关联的定义与查询
class User extends AppModel
{
var $name = 'User';
var $hasMany = array(
'Blog' => array(
'className' => 'Blog',
'conditions' => 'Blog.status = 1',
'order' => 'Blog.created DESC',
'limit' => '5',
'foreignKey' => 'user_id',
'dependent' => true,
'exclusive' => false, 'finderQuery' => ''
)
);
}
$hasMany array 用来定义 User 包含多条 Blog 这样的关联关系。
className: 关联对象类名。
conditions: 关联对象限定条件。
order: 关联对象排列子句。
limit: 用 limit 来限定检索的关联对象数量。
foreignKey: 外键字段名。
dependent: 是否级联删除。
exclusive: 如果为 TRUE,所有的关联对象将在一句 SQL 中删除,model 的 beforeDelete 回调函数不会被执行。
finderQuery: 定义一句完整的 SQL 语句来检索关联对象,能够对关联规则进行最大程度上的控制。
同样可以为 Blog 加上关联 User 对象的 belongTo 关联。
hasAndBelongsToMany 关联的定义与查询。
class Blog extends AppModel
{
var $name = 'Blog';
var $hasAndBelongsToMany = array('Tag' =>
array('className' => 'Tag',
'joinTable' => 'blogs_tags',
'foreignKey' => 'blog_id',
'associationForeignKey'=> 'tag_id',
'conditions' => '',
'order' => '',
'limit' => '',
'uniq' => true,
'finderQuery' => '',
'deleteQuery' => '',
)
);
}
$hasAndBelongsToMany array 是定义 HABTM 关联的变量。
className: 关联对象类名。
joinTable: 如果没有遵循 Cake 的命名约定建立关联表,则需要设置该 key 来指定关联表。
foreignKey: 定义本 mode 在关联表中的外键字段。
associationForeignKey: 关联表中指向关联对象的外键字段名。
conditions: 关联对象限定条件。
order: 关联对象排序子句。
limit: 关联对象数量限制。
uniq: 设为 true 的话,重复的关联对象将被过滤掉。
finderQuery: 完整的关联对象检索语句。
deleteQuery: 完整的删除关联关系的SQL 语句。
保存关联对象:
当关联的两个对象都没有持久化,你需要首先持久化主对象。
在保存子对象时要把父对象的 ID 保持在子对象中。
保存 hasAndBelongsToMany 关联对象:
使用 bindModel() 和 unbindModel() 实时地改变关联关系:
分享到:
相关推荐
总的来说,CakePHP 的 Model 关联对象是其 ORM(对象关系映射)系统的核心部分,它简化了数据库操作,提高了代码的可读性和可维护性。通过正确配置和使用关联关系,开发者可以更高效地处理复杂的数据库交互,减少...
去除的办法是: 修改cake\libs\view\templates\layouts\default.thtml,这个是视图文件的通用模板框架... 您可能感兴趣的文章:CakePHP框架Model关联对象用法分析cakephp常见知识点汇总CakePHP框架Session设置方法分析cak
此外,CakePHP的关联(Association)功能支持模型间的多种关系,如BelongsTo、HasOne、HasMany、BelongsToMany等。 View层,CakePHP使用模板引擎处理视图渲染,通过Helper类提供各种辅助函数,简化HTML的生成。例如...
在CakePHP中,Model还支持关联对象(associations),如belongsTo、hasOne、hasMany、hasAndBelongsToMany等,这使得处理多表之间的复杂关系变得轻松。例如,一个用户可以有多个博客,而每个博客只有一个作者,通过...
CakePHP是一个基于MVC(Model-View-Controller)架构的开源PHP框架,它旨在简化Web应用的开发过程,提供高效、安全和可扩展的解决方案。这个"cakephp中文手册API"是针对CakePHP框架的中文参考文档,对于初学者来说,...
CakePHP框架是一个开源的PHP开发框架,它遵循了多种著名的设计模式,包括ActiveRecord(活动记录)、Association Data Mapping(关联数据映射)、Front Controller(前端控制器)和Model-View-Controller(模型-视图...
- **访问脚本之家.html**:可能是一个关于CakePHP或其他PHP技术的文章链接,提供更多的学习资源。 - **readme.txt**:通常包含项目的基本信息、安装指南或注意事项,对于理解项目结构和运行要求很有帮助。 综上所述...
CakePHP提供ORM(对象关系映射)功能,使得操作数据库更加直观。 6. **Controller**:控制器处理HTTP请求,调用模型进行业务逻辑处理,并决定如何呈现视图。 7. **View**:视图负责渲染用户看到的页面,可以包含...
- **通用目的**:概述了CakePHP提供的各种通用库和工具,如数据库访问对象(DAO)、日志记录等。 - **Behavior**:解释了Behavior的含义及其如何用于扩展模型的行为。 - **Component**:介绍了组件的概念,以及如何...
- **Basics**: ORM 基础知识,如实体、表和关联关系等。 - **Debugging**: 调试工具和技巧。 - **Object settings/configuration**: 对象配置设置。 - **Cache**: 缓存机制及其配置。 - **Core**: 核心类和组件...
4. **模型(Model)**:理解如何创建数据模型,使用ORM(对象关系映射)操作数据库,如CRUD(创建、读取、更新、删除)操作,以及实现数据库查询和关联。 5. **视图(View)**:学习如何创建视图模板,分离业务逻辑...
1. **模型(Model)**:模型层是应用的数据层,负责处理和管理数据。它代表数据库中的表或数据源,处理业务逻辑,并与视图和控制器交互。 2. **视图(View)**:视图层主要负责展示数据,将模型中的数据转化为用户...
2. **ActiveRecord**:CakePHP采用了类似ActiveRecord的设计,使得数据库操作更加简便,通过ORM(对象关系映射)将数据库表与PHP类关联,减少SQL编写工作。 3. ** Bake工具**:Bake是CakePHP内置的代码生成工具,...
3. **ORM(对象关系映射)**:理解Model层如何通过CakePHP的ORM将数据库表映射为PHP类,以及如何使用关联(如一对一、一对多、多对多)进行数据操作。 4. **表单处理与验证**:学习如何创建和处理用户表单,以及...
**蛋糕PHP(CakePHP)2.3.0详解** 蛋糕PHP(CakePHP)是一个基于Model-View-Controller(MVC)架构...在使用过程中,对压缩包中的cakephp-2.3.0文件夹进行解压并按照官方文档进行配置,即可开始您的CakePHP开发之旅。
2. ORM(对象关系映射):CakePHP的ActiveRecord实现使得数据库操作变得更加简单,通过PHP对象即可操作数据库记录。 3. 控制器路由:CakePHP自动处理URL路由,将URL映射到相应的控制器和动作上,简化了URL管理和...
在PHP的世界里,CakePHP是一个流行的MVC(Model-View-Controller)框架,它提供了许多功能来帮助开发者构建高效、可维护的Web应用程序。在CakePHP中,Access Control List(ACL)是一个强大的工具,用于管理应用程序...
3. **创建模型**:学习如何定义数据模型,以及如何使用 CakePHP 的 Active Record 风格的 ORM(对象关系映射)进行数据库操作。了解如何处理表单提交和数据持久化。 4. **构建控制器**:理解控制器如何处理用户请求...
在 CakePHP 2.1.2 中,模型层支持 Active Record 风格的数据操作,允许开发者通过简单的对象方法操作数据库,如 find()、save() 和 delete(),极大提高了开发效率。同时,它还提供了一套完整的关联规则(hasMany、...