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 购物车的例子
May 04 PHP
在php和MySql中计算时间差的方法
Apr 22 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
Nov 26 PHP
php 字符串压缩方法比较示例
Jan 23 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
May 13 PHP
PHP+Mysql基于事务处理实现转账功能的方法
Jul 08 PHP
yii2.0实现pathinfo的形式访问的配置方法
Apr 06 PHP
php集成动态口令认证
Jul 21 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
Aug 06 PHP
PHP写API输出的时用echo的原因详解
Apr 28 PHP
redis+php实现微博(二)发布与关注功能详解
Sep 23 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
Sep 30 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 过滤器实现代码
2010/08/09 PHP
PHP设计模式 注册表模式(多个类的注册)
2012/02/05 PHP
php中yar框架实例用法讲解
2020/12/27 PHP
JS backgroundImage控制
2009/05/19 Javascript
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
根据邮箱的域名跳转到相应的登录页面的代码
2012/02/27 Javascript
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
javascript设计模式--策略模式之输入验证
2015/11/27 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
2015/11/30 Javascript
JavaScript数据类型学习笔记
2016/01/25 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
正则验证小数点后面只能有两位数的方法
2017/02/28 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
2017/05/02 Javascript
Bootstrap 表单验证formValidation 实现远程验证功能
2017/05/17 Javascript
vue引入axios同源跨域问题
2018/09/27 Javascript
基于VUE实现的九宫格抽奖功能
2018/09/30 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
Python对列表排序的方法实例分析
2015/05/16 Python
CentOS安装pillow报错的解决方法
2016/01/27 Python
Python pip 安装与使用(安装、更新、删除)
2019/10/06 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
Python 求向量的余弦值操作
2021/03/04 Python
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
仓库班组长岗位职责
2013/12/12 职场文书
仓库理货员岗位职责
2013/12/18 职场文书
小学后勤管理制度
2014/01/14 职场文书
新教师培训方案
2014/06/08 职场文书
市场营销专业毕业生求职信
2014/07/21 职场文书
国土资源局开展党的群众路线教育实践活动整改措施
2014/09/26 职场文书
支行行长岗位职责
2015/02/15 职场文书
保险公司客户经理岗位职责
2015/04/09 职场文书
Python使用scapy模块发包收包
2021/05/07 Python
Apache Linkis 中间件架构及快速安装步骤
2022/03/16 Servers
create-react-app开发常用配置教程
2022/06/25 Javascript
小程序实现侧滑删除功能
2022/06/25 Javascript