模型


模型定义

  1. 命名规则:模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,然后加上模型层的名称(默认定义是Model),例如:

模型名 约定对应数据表(假设数据库的前缀定义是 think_)
UserModel   think_user
UserTypeModel   think_user_type

模型实例化

在ThinkPHP中,可以无需进行任何模型定义。只有在需要封装单独的业务逻辑的时候,模型类才是必须被定义的,因此ThinkPHP在模型上有很多的灵活和方便性,让你无需因为表太多而烦恼。
根据不同的模型定义,我们有几种实例化模型的方法,根据需要采用不同的方式:

  1. 直接实例化 $User = new \Home\Model\UserModel();
  2. 带参数实例化New  = new \Home\Model\NewModel('blog','think_',New = new \Home\Model\NewModel('blog','think_',connection);
  3. 数据库连接方式
    1. 字符串定义:new\Home\Model\NewModel(‘blog’,’think_’,’mysql://root:1234@localhost/demo’);
    2. 数组定义:
$connection = array('db_type'    =>   'mysql','db_host'    =>   '127.0.0.1','db_user'    =>   'root','db_pwd'     =>   '12345','db_port'    =>    3306,'db_name'    =>    'demo',
);
new \Home\Model\NewModel('new','think_',$connection);
  1. 配置定义
//数据库配置1
'DB_CONFIG1' => array('db_type'  => 'mysql','db_user'  => 'root','db_pwd'   => '1234','db_host'  => 'localhost','db_port'  => '3306','db_name'  => 'thinkphp'
),
//数据库配置2
'DB_CONFIG2' => 'mysql://root:1234@localhost:3306/thinkphp',
new \Home\Model\NewModel('new','think_','DB_CONFIG1');
new \Home\Model\BlogModel('blog','think_','DB_CONFIG2');

CURD操作

  1. 数据创建/编辑 user=M(′user);user=M('user);user->create(); $user->add()/save(),根据表单提交的数据自动创建对象,也支持连贯操作,field(),filter(),alias()之类,前提name字段要写对。
  2. 如果需要更改或添加 $user->name=’wanglas’。
  3. setField()支持修改单个字段,或者传入数组。
  4. setInc(),setDec()可传入字段,数量,延迟多久后进行修改(秒)。
  5. 开启AR(activeRecord模式) user−>where(′id=8′)−>find()等同于user->where('id=8')->find()等同于 user->find(8); $uer->delete(8);
  6. 字段映射 : ThinkPHP的字段映射功能可以让你在表单中隐藏真正的数据表字段,而不用担心放弃自动创建表单对象的功能,假设我们的User表里面有username和email字段,我们需要映射成另外的字段,定义方式如下:
namespace Home\Model;
use Think\Model;
Class UserModel extends Model{protected $_map = array('name' =>'username', // 把表单中name映射到数据表的username字段'mail'  =>'email', // 把表单中的mail映射到数据表的email字段);
}
  1. 这样在表单里面就可以直接使用name和mail名称作为表单数据提交了。我们使用create方法创建数据对象的时候,会自动转换成定义的实际数据表字段。 同时在读取数据的时候 如果要控制输出对象的字段名称需要开启 ‘READ_DATA_MAP’=>true 或者直接使用parseFieldsMap方法进行转换处理,例如
// 实例化User模型
$User = D('User');
$data = $User->find(3);
$data = $User->parseFieldsMap($data);

引用:

Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。
在计算机领域中,表示编译器为每个被激活的函数分配的内存空间。
活动记录一般都存在栈中。因为栈结构比较简单,硬件能够支持。
Active Record 和 Row Gateway (行记录入口)十分相似,但前者是领域模型,后者是一种数据源模式。关系型数据库往往通过外键来表述实体关系,Active Record 在数据源层面上也将这种关系映射为对象的关联和聚集。
Active Record 适合非常简单的领域需求,尤其在领域模型和数据库模型十分相似的情况下。如果遇到更加复杂的领域模型结构(例如用到继承、策略的领域模型),往往需要使用分离数据源的领域模型,结合 Data Mapper (数据映射器)使用。
Active Record 驱动框架一般兼有 ORM 框架的功能,但 Active Record 不是简单的 ORM,正如和 Row Gateway 的区别。著名的例子是全栈(Full Stack) Web 开发框架 Ruby on Rails ,其默认使用一个纯 Ruby 写成的 Active Record 框架来驱动 MVC 中的模型层。
在 Martin Fowler 的 《企业应用架构模式》 一书中曾详细叙述了本模式。
以下是著名的 Active Record 驱动框架:
SQLObject(Python)
Ruby on Rails ActiveRecord (Ruby)
Yii Framework ActiveRecord (PHP)
Castle ActiveRecord (.NET)

ThinkPHP3.2.3手册阅读相关推荐

  1. sed 手册阅读笔记转

    原文链接sed 手册阅读笔记摘要sed 手册本身不太适合初学者,我在看的过程中加了一些 自己的注释和一些例子,帮助理解,如有偏差或错误,请指出,多谢.目录1. sed的工作原理 2. sed中如何选择 ...

  2. php手册3.1,thinkphp3.1手册下载|thinkphp3.1手册(thinkphp3.1开发手册chm版下载)_星星软件园...

    thinkphp3.1开发手册是为thinkphp用户打造的辅助工具,可以方便用户了解phpthinkphp的基本环境要求.配置步骤等,同时还包含了丰富的函数和类库.模型等,有需要的用户欢迎下载. 包 ...

  3. 14015.xilinx-芯片手册阅读笔记

    文章目录 1 xilinx芯片手册阅读笔记 1 Introduction 介绍 1.1 System Block Diagram 系统框图 1.2 Power Domains and Islands ...

  4. FPGA芯片手册阅读技巧

    FPGA的管脚主要包括:用户I/O(User I/O).配置管脚.电源.时钟及特殊应用管脚等.其中有些管脚可有多种用途,所以在设计FPGA电路之前,需要认真的阅读相应FPGA的芯片手册. 下面以ALT ...

  5. Xilinx AXI USB2.0 Device IP 手册阅读笔记

    目录 1. 前言 2. 概要 2.1 USB2.0协议特点: 2.2 The AXI USB 2.0 Device介绍 2.2.1 Endpoint0: 2.2.2 Endpoint1~7: 3. 详 ...

  6. 自动(智能)驾驶 | 全网第一本激光雷达手册阅读指南(下)

    接着从上篇继续说,本部分主要介绍激光雷达数据等内容,这个可以说是看懂激光雷达手册的重中之重,也就是关键问题的关键(皮~).同样由于velodyne的手册比较难啃但是内容完整丰富,本期我们依然以velo ...

  7. Java开发手册阅读笔记

    <Java开发手册>阅读理解,抛砖引玉 前言 最近开发一个项目,由于是第一次搞开发没什么经验,由于在编码上没有什么约束,完全依靠idea的自动提示,在后期重构和开发时带来了一些麻烦,而且代 ...

  8. emWin移植与使用(4/1)——框架介绍及emWin手册阅读

    前言: 大家在首次接触到emWin图形库时,都会有一些疑问.我们应该如何在屏幕上使用GUI界面呢?使用GUI界面,我们需要做哪些操作呢?可不可以直接就可以使用emWin等等疑问? 完整的emWin库软 ...

  9. INCA官方手册阅读记录

    文章目录 0. 相关链接 0.1. 简要信息 0.1.1 软件版本 0.1.2 阅读手册 1&2 Introduction & New Feeatures in INCA V7 1.6 ...

最新文章

  1. 从事了两年 AI 研究,我学到了什么?
  2. ev3pid巡线_PID算法巡线
  3. 第二篇 第一章建筑分类和耐火等级检查(二)
  4. 用jsp开发web应用并不是一个高效率的选择
  5. 俯首甘为孺子牛上一句是什么
  6. lua笔记1 基础概念
  7. 动画:什么是散列表?
  8. suse linux11下的多网口位置确定
  9. zedboard实现流水灯
  10. Linux Linux开发 Linux高级编程 Linux文档
  11. hdu 1811 Rank of Tetris 并查集+拓扑排序
  12. 【maven】聚合工程
  13. html5怎么调用cur指针,win7鼠标指针主题包怎么用
  14. Unity Shader 中获取屏幕坐标
  15. Delphi 10.3.3 安装DevExpress VCL 19 教程
  16. 【电赛训练】红外光通信装置 2013年电赛真题
  17. 线性方程组、齐次线性方程组和非线性方程组的最小二乘解
  18. 【Proteus仿真】DAC0832+51单片机汇编实现三角波输出
  19. 经典策略之Dual Trust策略
  20. 解决 Access denied for user'root'@'IP地址'

热门文章

  1. 引用 好文共赏:hao123站长李兴平的成功史
  2. 【Python网络蜘蛛 · 6】:明文和密文的转换、json模块的使用、jsonpath模块的使用(附源代码)
  3. 下单后,订单拆单能怎拆?
  4. hbuilder创建app并利用真机运行调试
  5. chorme浏览器显示“您的浏览器受管理”是被植入病毒或其它程序了吗?
  6. mds聚类matlab,机器学习C9笔记:MDS聚类可视化
  7. 3款移动应用数据统计分析平台对比
  8. java 新特性-TWR(Try-with-resources)
  9. Extention匿名类
  10. 图表示学习之时序的事件和节点动态