AR模式
AR模式
在ThinkPHP框架中,一共存在两种操作模式:ORM模式与AR模式
ORM模式:① 实例化模型 ② 创建数据对象组装数组 ③ 调用相关方法执行相关操作
AR模式:① 实例化模型 ② 把数据映射到模型属性 ③ 调用相关方法执行相关操作
1、AR模式
- 表映射到类
- 字段映射到属性
- 记录映射到对象
使用PHP代码模拟AR模式
① 设计数据库

② 创建UserModel.class.php模型,映射tk_user表
③ 把字段映射到模型中的属性

④ 把记录映射成对象

在实际项目开发中,虽然以上代码可以完成AR模式,但是还存在一些小问题。面向对象强调封装特性,不要暴露过多的信息给类外,改正以上代码如下图所示:

以上代码虽然解决了封装性,但是在类的外面我们就没有办法直接调用其属性了,那么该如何解决呢?
答:采用JavaBean思想,可以为每一个私有属性定义两个公有方法对其进行设置与获取。

但是以上代码如果具有多个私有属性,那么必须要封装多个公有方法,过于麻烦。为了解决这个问题,在PHP5.0之后引入了两个魔术方法__set()与__get()方法来解决。

2、ThinkPHP中的AR模式
① 实现增加操作

② 实现删除操作

③ 实现更新操作

④ 实现查询操作

问题:我们根本就没有在模型中定义过任何与字段同名的属性,为什么还可以直接操作呢?
AR模式的更多相关文章
- 黑马lavarel教程---5、模型操作(AR模式)
黑马lavarel教程---5.模型操作(AR模式) 一.总结 一句话总结: AR: ActiveRecord :Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型 ...
- Spring boot+Mybatisplus用AR模式实现逻辑删除操作
Mybatisplus的AR模式 Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录.ActiveRecord ...
- Yii 框架里数据库操作详解-[增加、查询、更新、删除的方法 'AR模式']
public function getMinLimit () { $sql = "..."; $result = yii::app()->db-& ...
- Yii数据库操作增删改查-[增加\查询\更新\删除 AR模式]
在Yii的开发中常常需要去使用Yii的增删改查方法,这些方法又可以多次变化和组合,带来全方位的实现对数据库的处理,下面对这些方法做一些简单的整理和梳理,有遗漏或是BUG,敬请指出.灰常感谢!!! 一. ...
- yii AR 模式操作
Bat::find() ; //返回查询实例 Bat::find()->one() //返回一条数据 Bat::find()->all(); //返回所有数据 Bat::find()-&g ...
- ActiveRecord模式整理
DAO Data Access Object,数据访问对象 DAO是一个软件设计的指导原则,在核心J2EE模式中是这样介绍DAO模式的:为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象 ...
- 谈谈php里的DAO Model AR
这次要谈的3个关键字:DAO.Model.AR,是我们在做web应用时常见的几个概念,也被称作设计模式(design pattern),先简单看看它们的全拼和中文: DAO:Data Access O ...
- yii框架AR详解
虽 然Yii DAO可以处理事实上任何数据库相关的任务,但很可能我们会花费90%的时间用来编写一些通用的SQL语句来执行CRUD操作(创建,读取,更新和删除). 同时我们也很难维护这些PHP和SQL语 ...
- 爆款AR游戏如何打造?网易杨鹏以《悠梦》为例详解前沿技术
本文来自网易云社区. 7月31日,2018云创大会游戏论坛在杭州国际博览中心103B圆满举行.本场游戏论坛聚焦探讨了可能对游戏行业发展有重大推动的新技术.新实践,如AR.区块链.安全.大数据等. 网易 ...
随机推荐
- oc-25-id类型,
/** id:万能指针 能够指向任何OC对象. id = NSObject *, id cat = [Cat new]; [cat jump]; NSObject:是所有类的父类,基类.可以指向任何O ...
- 网络IPC:套接字之数据传输
既然将套接字端点表示为文件描述符,那么只要建立连接,就可以使用read和write来通过套接字通信.通过在connect函数里设置对方地址,数据报套接字也可以“连接”.在套接字描述符上采用read和w ...
- ubuntu搭建LAMP服务器
新手记录下...... 安装apache apt-get install apache2 安装mysql apt-get install mysql-server 安装php apt-get inst ...
- 通过改变uiview的layer的frame来实现进度条
#import <UIKit/UIKit.h> @interface ProgressView : UIView @property(nonatomic,assign)CGFloat pr ...
- 读取Excel文件的两种方法
第一种方法:传统方法,采用OleDB读取EXCEL文件, 优点:写法简单,缺点:服务器必须安有此组件才能用,不推荐使用 private DataSet GetConnect_DataSet2(stri ...
- Java优先级队列
package com.lk.A; import java.util.PriorityQueue; public class Test5 { public static void main(Strin ...
- POJ 2236 Wireless Network (并查集)
Wireless Network Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 18066 Accepted: 761 ...
- 剑指Offer40 和为s的连续正数序列
/************************************************************************* > File Name: 40_Contin ...
- Python时间,日期,时间戳之间转换
1.将字符串的时间转换为时间戳 方法: a = "2013-10-10 23:40:00" 将其转换为时间数组 import ...
- OpenShare常见问题及解答
OpenShare常见问题及回答: Q:OpenShare可以整合SAP么? A:当然可以,OpenShare是真正完全开放的产品,但要进行二次开发,事实上我们帮我们大部分的客户都整合了SAP,包括数 ...