`
lesorb
  • 浏览: 122547 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CakePHP之Model关联对象

阅读更多
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() 实时地改变关联关系:
0
0
分享到:
评论

相关推荐

    CakePHP框架Model关联对象用法分析

    总的来说,CakePHP 的 Model 关联对象是其 ORM(对象关系映射)系统的核心部分,它简化了数据库操作,提高了代码的可读性和可维护性。通过正确配置和使用关联关系,开发者可以更高效地处理复杂的数据库交互,减少...

    CakePHP去除默认显示的标题及图标的方法

    去除的办法是: 修改cake\libs\view\templates\layouts\default.thtml,这个是视图文件的通用模板框架... 您可能感兴趣的文章:CakePHP框架Model关联对象用法分析cakephp常见知识点汇总CakePHP框架Session设置方法分析cak

    cakephp框架源码

    此外,CakePHP的关联(Association)功能支持模型间的多种关系,如BelongsTo、HasOne、HasMany、BelongsToMany等。 View层,CakePHP使用模板引擎处理视图渲染,通过Helper类提供各种辅助函数,简化HTML的生成。例如...

    CakePHP框架Model函数定义方法示例

    在CakePHP中,Model还支持关联对象(associations),如belongsTo、hasOne、hasMany、hasAndBelongsToMany等,这使得处理多表之间的复杂关系变得轻松。例如,一个用户可以有多个博客,而每个博客只有一个作者,通过...

    cakephp中文手册API

    CakePHP是一个基于MVC(Model-View-Controller)架构的开源PHP框架,它旨在简化Web应用的开发过程,提供高效、安全和可扩展的解决方案。这个"cakephp中文手册API"是针对CakePHP框架的中文参考文档,对于初学者来说,...

    CakePHP框架指南

    CakePHP框架是一个开源的PHP开发框架,它遵循了多种著名的设计模式,包括ActiveRecord(活动记录)、Association Data Mapping(关联数据映射)、Front Controller(前端控制器)和Model-View-Controller(模型-视图...

    CakePHP PHP MVC框架

    - **访问脚本之家.html**:可能是一个关于CakePHP或其他PHP技术的文章链接,提供更多的学习资源。 - **readme.txt**:通常包含项目的基本信息、安装指南或注意事项,对于理解项目结构和运行要求很有帮助。 综上所述...

    cakephp最新开发文档

    CakePHP提供ORM(对象关系映射)功能,使得操作数据库更加直观。 6. **Controller**:控制器处理HTTP请求,调用模型进行业务逻辑处理,并决定如何呈现视图。 7. **View**:视图负责渲染用户看到的页面,可以包含...

    CakePHP 3.5 开发手册文档 CakePHP Cookbook Documentation Release 3.5/共900页 PDF

    - **Basics**: ORM 基础知识,如实体、表和关联关系等。 - **Debugging**: 调试工具和技巧。 - **Object settings/configuration**: 对象配置设置。 - **Cache**: 缓存机制及其配置。 - **Core**: 核心类和组件...

    CakePHP视频教程(AVI格式)

    4. **模型(Model)**:理解如何创建数据模型,使用ORM(对象关系映射)操作数据库,如CRUD(创建、读取、更新、删除)操作,以及实现数据库查询和关联。 5. **视图(View)**:学习如何创建视图模板,分离业务逻辑...

    cakephp 中文手册

    1. **模型(Model)**:模型层是应用的数据层,负责处理和管理数据。它代表数据库中的表或数据源,处理业务逻辑,并与视图和控制器交互。 2. **视图(View)**:视图层主要负责展示数据,将模型中的数据转化为用户...

    cakephp软件包

    2. **ActiveRecord**:CakePHP采用了类似ActiveRecord的设计,使得数据库操作更加简便,通过ORM(对象关系映射)将数据库表与PHP类关联,减少SQL编写工作。 3. ** Bake工具**:Bake是CakePHP内置的代码生成工具,...

    Practical CakePHP Projects(2009).rar

    3. **ORM(对象关系映射)**:理解Model层如何通过CakePHP的ORM将数据库表映射为PHP类,以及如何使用关联(如一对一、一对多、多对多)进行数据操作。 4. **表单处理与验证**:学习如何创建和处理用户表单,以及...

    cakephp-2.3.0.rar_ruby rails php

    **蛋糕PHP(CakePHP)2.3.0详解** 蛋糕PHP(CakePHP)是一个基于Model-View-Controller(MVC)架构...在使用过程中,对压缩包中的cakephp-2.3.0文件夹进行解压并按照官方文档进行配置,即可开始您的CakePHP开发之旅。

    基于PHP的CakePHP(PHP的框架)源码.zip

    2. ORM(对象关系映射):CakePHP的ActiveRecord实现使得数据库操作变得更加简单,通过PHP对象即可操作数据库记录。 3. 控制器路由:CakePHP自动处理URL路由,将URL映射到相应的控制器和动作上,简化了URL管理和...

    cakephp中acl详解

    在PHP的世界里,CakePHP是一个流行的MVC(Model-View-Controller)框架,它提供了许多功能来帮助开发者构建高效、可维护的Web应用程序。在CakePHP中,Access Control List(ACL)是一个强大的工具,用于管理应用程序...

    packtpub.CakePHP.1.3.Application.Development.Cookbook.Mar.2011

    3. **创建模型**:学习如何定义数据模型,以及如何使用 CakePHP 的 Active Record 风格的 ORM(对象关系映射)进行数据库操作。了解如何处理表单提交和数据持久化。 4. **构建控制器**:理解控制器如何处理用户请求...

    cakephp-2.1.2

    在 CakePHP 2.1.2 中,模型层支持 Active Record 风格的数据操作,允许开发者通过简单的对象方法操作数据库,如 find()、save() 和 delete(),极大提高了开发效率。同时,它还提供了一套完整的关联规则(hasMany、...

Global site tag (gtag.js) - Google Analytics