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模式的更多相关文章

  1. 黑马lavarel教程---5、模型操作(AR模式)

    黑马lavarel教程---5.模型操作(AR模式) 一.总结 一句话总结: AR: ActiveRecord :Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型 ...

  2. Spring boot+Mybatisplus用AR模式实现逻辑删除操作

    Mybatisplus的AR模式 Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录.ActiveRecord ...

  3. Yii 框架里数据库操作详解-[增加、查询、更新、删除的方法 'AR模式']

    public function getMinLimit () {        $sql = "...";        $result = yii::app()->db-& ...

  4. Yii数据库操作增删改查-[增加\查询\更新\删除 AR模式]

    在Yii的开发中常常需要去使用Yii的增删改查方法,这些方法又可以多次变化和组合,带来全方位的实现对数据库的处理,下面对这些方法做一些简单的整理和梳理,有遗漏或是BUG,敬请指出.灰常感谢!!! 一. ...

  5. yii AR 模式操作

    Bat::find() ; //返回查询实例 Bat::find()->one() //返回一条数据 Bat::find()->all(); //返回所有数据 Bat::find()-&g ...

  6. ActiveRecord模式整理

    DAO Data Access Object,数据访问对象 DAO是一个软件设计的指导原则,在核心J2EE模式中是这样介绍DAO模式的:为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象 ...

  7. 谈谈php里的DAO Model AR

    这次要谈的3个关键字:DAO.Model.AR,是我们在做web应用时常见的几个概念,也被称作设计模式(design pattern),先简单看看它们的全拼和中文: DAO:Data Access O ...

  8. yii框架AR详解

    虽 然Yii DAO可以处理事实上任何数据库相关的任务,但很可能我们会花费90%的时间用来编写一些通用的SQL语句来执行CRUD操作(创建,读取,更新和删除). 同时我们也很难维护这些PHP和SQL语 ...

  9. 爆款AR游戏如何打造?网易杨鹏以《悠梦》为例详解前沿技术

    本文来自网易云社区. 7月31日,2018云创大会游戏论坛在杭州国际博览中心103B圆满举行.本场游戏论坛聚焦探讨了可能对游戏行业发展有重大推动的新技术.新实践,如AR.区块链.安全.大数据等. 网易 ...

随机推荐

  1. [MEAN Stack] First API -- 1. with Node.js, Express and MongoDB

    Learn how to import data into your MongoDB and then use Express to serve a simple Node.js API. Impor ...

  2. jQuery 属性操作 - addClass() 方法

    使用 addClass() 和 removeClass() 来移除 class,并添加新的 class. <html> <head> <script type=" ...

  3. Progressive JPEG

    和Baseline一遍扫描不同,Progressive JPEG文件包含多次扫描,这些扫描顺寻的存储在JPEG文件中.打开文件过程中,会先显示整个图片的模糊轮廓,随着扫描次数的增加,图片变得越来越清晰 ...

  4. 对线性回归,logistic回归和一般回归的认识

    原文:http://www.cnblogs.com/jerrylead/archive/2011/03/05/1971867.html#3281650 对线性回归,logistic回归和一般回归的认识 ...

  5. xml<>编译

    < 用 <    >用 >      表示"空格"

  6. Asynctask的使用及理解

    1.对于耗时的操作,我们的一般方法是开启“子线程”.如果需要更新UI,则需要使用handler 2.如果耗时的操作太多,那么我们需要开启太多的子线程,这就会给系统带来巨大的负担,随之也会带来性能方面的 ...

  7. 阮一峰博客里面css3的display:flex的布局

  8. Linq中使用Left Join

    use Test Create table Student( ID ,) primary key, ) not null ) Create Table Book( ID ,) primary key, ...

  9. 基于SocketAsyncEventArgs的版本

    文字水平差就慢慢开始练习,同时分享一下,项目中写的简单socket程序,不同方式的版本,今天上一个异步.可能实现高性能的处理方式.IOCP就不多说了,高性能的完成端口,可以实现套接字对象的复用,降低开 ...

  10. spring mvc 重新定向到一个新的Url

    在写项目的时候要求根据请求的参数的不同重新将请求分发,在查阅了spring mvc的一些资料无果后(想使用拦截器去做)就没办法使用重定向的方式去写了 /** * 通过访问API的方式分发请求 * * ...