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


Posted in PHP onAugust 04, 2017

本文实例讲述了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() 实时地改变关联关系:

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
深入PHP变量存储的详解
Jun 13 PHP
php错误级别的设置方法
Jun 17 PHP
通过table标签,PHP输出EXCEL的实现方法
Jul 24 PHP
PHP把小数转成整数3种方法
Jun 30 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
Mar 02 PHP
php实现Mysql简易操作类
Oct 11 PHP
Yii2汉字转拼音类的实例代码
Apr 18 PHP
PHP关键特性之命名空间实例详解
May 06 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
Nov 20 PHP
PHP获取二叉树镜像的方法
Jan 17 PHP
PHP中的异常处理机制深入讲解
Nov 10 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
Aug 04 #PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
Aug 04 #PHP
php7安装yar扩展的方法详解
Aug 03 #PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
Aug 03 #PHP
PHP7扩展开发教程之Hello World实现方法示例
Aug 03 #PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
Aug 03 #PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
Aug 03 #PHP
You might like
PHP中的函数-- foreach()的用法详解
2013/06/24 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
身份证号码前六位所代表的省,市,区, 以及地区编码下载
2007/04/12 Javascript
精解window.setTimeout()&window.setInterval()使用方式与参数传递问题!
2007/11/23 Javascript
jQuery get和post 方法传值注意事项
2009/11/03 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
2010/03/24 Javascript
一个封装js代码-----展开收起效果示例
2013/07/03 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
jQuery is()函数用法3例
2014/05/06 Javascript
javascript实现漂亮的拖动层,窗口拖拽特效
2015/04/24 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
2015/12/17 Javascript
JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
2016/03/30 Javascript
Javascript中内建函数reduce的应用详解
2016/10/20 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
2018/03/06 Javascript
vue项目引入Iconfont图标库的教程图解
2018/10/24 Javascript
vuex + keep-alive实现tab标签页面缓存功能
2019/10/17 Javascript
js回调函数仿360开机
2019/12/26 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
Python编写简单的HTML页面合并脚本
2016/07/11 Python
Python实现修改文件内容的方法分析
2018/03/25 Python
对python的文件内注释 help注释方法
2018/05/23 Python
Python之csv文件从MySQL数据库导入导出的方法
2018/06/21 Python
numpy向空的二维数组中添加元素的方法
2018/11/01 Python
使用python的pexpect模块,实现远程免密登录的示例
2019/02/14 Python
python使用socket实现的传输demo示例【基于TCP协议】
2019/09/24 Python
Python通过getattr函数获取对象的属性值
2020/10/16 Python
详解CSS3实现响应式手风琴效果
2020/06/10 HTML / CSS
文明教师事迹材料
2014/01/16 职场文书
自我鉴定写作要点
2014/01/17 职场文书
师德建设实施方案
2014/03/21 职场文书
委托书范文
2014/04/02 职场文书
家庭财产分割协议范文
2014/11/24 职场文书
2015年店长个人工作总结
2015/10/23 职场文书
煤矿施工安全协议书
2016/03/22 职场文书
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android