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 相关文章推荐
如何限制访问者的ip(PHPBB的代码)
Oct 09 PHP
在普通HTTP上安全地传输密码
Jul 21 PHP
php strstr查找字符串中是否包含某些字符的查找函数
Jun 03 PHP
php设计模式 Facade(外观模式)
Jun 26 PHP
七款最流行的PHP本地服务器分享
Feb 19 PHP
php+ajax实时刷新简单实例
Feb 25 PHP
JavaScript实现滚动栏效果的方法
Apr 27 PHP
phpMyAdmin安装并配置允许空密码登录
Jul 04 PHP
php HTML无刷新提交表单
Apr 05 PHP
java模拟PHP的pack和unpack类
Apr 13 PHP
PHP的时间戳与具体时间转化的简单实现
Jun 13 PHP
基于PHP实现栈数据结构和括号匹配算法示例
Aug 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 验证码制作(网树注释思想)
2009/07/20 PHP
php线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
PHP根据IP地址获取所在城市具体实现
2013/11/27 PHP
详解php魔术方法(Magic methods)的使用方法
2016/02/14 PHP
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
2012/07/31 Javascript
jQuery 1.9使用$.support替代$.browser的使用方法
2014/05/27 Javascript
21个JavaScript事件(Events)属性汇总
2014/12/02 Javascript
Javascript节点关系实例分析
2015/05/15 Javascript
jQuery 跨域访问解决原理案例详解
2016/07/09 Javascript
js发送短信倒计时的简单实现方法
2016/09/08 Javascript
微信端开发--登录小程序步骤
2017/01/11 Javascript
详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
2017/05/22 Javascript
集合Bootstrap自定义confirm提示效果
2017/09/19 Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
2018/01/18 Javascript
解决Angular4项目部署到服务器上刷新404的问题
2018/08/31 Javascript
js replace替换字符串同时替换多个方法
2018/11/27 Javascript
vue中使用带隐藏文本信息的图片、图片水印的方法
2020/04/24 Javascript
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
2020/10/29 Javascript
原生JavaScript实现幻灯片效果
2021/02/19 Javascript
在Python中使用HTMLParser解析HTML的教程
2015/04/29 Python
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
全球最大的在线旅游公司:Expedia
2017/11/16 全球购物
如何获取某个日期是当月的最后一天
2013/12/05 面试题
机电专业个人求职信范文
2013/12/30 职场文书
执行力心得体会
2013/12/31 职场文书
文化产业实施方案
2014/06/07 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
2015元旦联欢晚会结束语
2014/12/14 职场文书
乡镇科协工作总结2015
2015/05/19 职场文书
早会开场白台词大全
2015/06/01 职场文书
退休教师追悼词
2015/06/23 职场文书
安全生产奖惩制度
2015/08/06 职场文书
家长对孩子的寒假评语
2015/10/09 职场文书