`
lesorb
  • 浏览: 121404 次
  • 性别: 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关联对象用法,结合实例形式分析了cakePHP框架Model关联对象的功能、定义及具体使用方法,需要的朋友可以参考下

    cakephp-containable行为behaviour

    2:cakephp中虽然对模型的操作方法中并没有提供像上面提到的连贯方法 但是cake框架提供了一个containable行为类来更好的完善模型关联中遇到的上述问题 ">1:thinkphp中通过框架提供的连贯操作Model >join ‘other ...

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

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

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

    主要介绍了CakePHP框架Model函数定义方法,结合具体查询函数示例分析了CakePHP框架Model函数的定义方法,需要的朋友可以参考下

    PHP的框架之CakePHP-CakePHP教程

    打包下载,里面有CakePHP的框架源码,下载后可直接使用,版本是1.1的,稳定版;CakePHP的分页组件源码;CakePHP的中文及英文教程,CHM格式;CakePHP的中文打印版教程,WORD格式,下载后可直接打印,方便的;CakePHP...

    PHP的框架之CakePHP-CakePHP教程终极教程

    打包下载,里面有CakePHP的框架源码,下载后可直接使用,版本是1.1的,稳定版;CakePHP的分页组件源码;CakePHP的中文及英文教程,CHM格式;CakePHP的中文打印版教程,WORD格式,下载后可直接打印,方便的;CakePHP...

    cakephp 框架

    cakephp 框架 cakephp 框架 cakephp 框架 cakephp 框架 cakephp 框架

    cakephp php-framework

    There are two main ways to get a fresh copy of CakePHP. You can either download an archive copy (zip/tar.gz/tar.bz2) from the main website, or check out the code from the git repository. To download ...

    cakephp手册详细讲解

    Model定义 & 关联关系定义 Controller 控制器 View 视图 Component组件 Helper Cake的全局常量及方法 数据检验 Plugins 插件 ACL控制 数据清理 (YY友情参与) Cake Session Component (papa友情参与) The Request ...

    Learn CakePHP(Apress,2ed,2016)

    This short book shows you how to carry out test-driven development with fixtures, model tests, controller tests, mocks, and test suites. Learn CakePHP contains all you need to get started with the ...

    CakePHP 3.4 开发手册文档 CakePHP Cookbook Documentation Release 3.4

    CakePHP 3.4 开发手册文档 CakePHP Cookbook Documentation Release 3.4

    cakephp分页.docx

    cakephp分页,cakephp框架的分页的方法的文档,是cakephp框架的内容。

    CakePHP php框架 v3.7.0 beta1.zip

    CakePHP php框架简介 CakePHP是一个用PHP编写的开源Web应用框架,不过其模型是用Ruby on ...面向对象 无需配置:只要安装好数据库 兼容PHP4和PHP5。 CakePHP php框架页面展示 相关阅读 同类推荐:站长常用源码

    Beginning CakePHP:From Novice to Professional

    Lead you from a basic setup of CakePHP to building a couple applications that will highlight CakePHPs functionality and capabilities without delving too deeply into the PHP language, but rather ...

    CakePHP php框架 v3.8.5

    主要特性:基于MVC架构视图支持Ajax内置校验框架提供应用程序的基础模块和CRUD 代码自动生成功能提供处理session,request,security的组件灵活的视图缓存功能面向对象无需配置:只要安装好数据库兼容PHP4和PHP5。

    CakePHP php框架 v3.7.8.zip

    CakePHP php框架简介 CakePHP是一个用PHP编写的开源Web应用框架,不过其模型是用Ruby on ...面向对象 无需配置:只要安装好数据库 兼容PHP4和PHP5。 CakePHP php框架页面展示 相关阅读 同类推荐:站长常用源码

    cakephp中acl详解

    cakephp中acl详解

    Learn CakePHP: With Unit Testing, 2nd Edition

    Learn CakePHP: With Unit Testing by Rādhārādhya Dāsa 2016 | ISBN: 1484212134 | English | 114 pages | EPUB | 1 MB Accelerate your development of PHP applications using the popular CakePHP web ...

Global site tag (gtag.js) - Google Analytics