php 数据库访问类(模型 Model) v1.1

Thinkphp框架 作为一个整体开发解决方案,ThinkPHP能够解决应用开发中的大多数需要,因为其自身包含了底层架构、兼容处理、基类库、数据库访问层、模板引擎、缓存机制、插件机制、角色认证、表单处理等常用的组件,并且对于跨版本、跨平台和跨数据库移植都比较方便。ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySql、PgSQL、Sqlite多种数据库以及PDO扩展,ThinkPHP框架本身没有什么特别模块要求,具体的应用系统运行环境要求视开发所涉及的模块。 阅读详情

# 规范

使用模型封装所有数据库操作(读和写),模型使用类(class)的形式进行定义。
除模型外,禁止通过 $db 类直接访问数据库。

一个模块的模型放在 model/ 目录内。模型以数据表作为粒度,则一个模型原则上只负责一个表的操作,模型又按操作类型分成读与写两类。

操作类型体现在命名前序上,使用 r_ 表示读, w_ 表示写。类名与源代码文件名都使用前序进行分类。

模型类名及文件名的命名主要参考数据表名,并去除表名中共同有的前序。

如:

数据库中有一数据表:phpcms2008_selepro_projectinfo
属于 selepro 模块的数据表,因此 phpcms2008_selepro_ 皆为表前序,表名中有意义的部份是 projectinfo 。
所以,模型定义如下:

model/r_projectinfo.class.php
model/w_projectinfo.class.php

r_projectinfo.class.php 为封装了对 projectinfo 表读操作的模型,类名为 r_selepro_projectinfo ,可见,类名需要加上模块名(selepro)作为前序。

w_projectinfo.class.php 为封装了对 projectinfo 表写操作的模型,类名为 w_selepro_projectinfo 。

# 加载


模型类使用 loadm() 函数加载及实例化,不在控制器中直接包含及 new 。
loadm 调用方法是:loadm('mod_name', 'model_file_name')。
eg. loadm('phpcms', 'r_projectinfo')
第一个参数为模型所属模块名,第二个参数为模型类定义文件名(不含 .class.php 部份)。
两个参数都使用单引号定义的字符串,分隔参数的逗号后跟一个空格,在需要查找某个模型被哪些地方调用时可以方便地查找出来。
否则调用格式不统一,无法通过简单的字符串搜索把一个模型的调用位置找出来。

# 实例变量名


读类型的模型使用 omr_ 前序,写类型的用 omw_ 前序。其中 o(obj)m(model)r(read)。
后跟模块名的前三个字母,再跟模型文件名各部份的前三个字母:
eg.
/selepro/model/r_projectinfo.class.php -> $omr_sel_pro
(其中 omr_ 为前序,sel 为模块名,pro 为模型文件名)
/selepro/model/w_material_info.class.php -> $omw_sel_mat_inf
完整的实例化语句为:
$omw_sel_mat_inf = loadm('selepro', 'w_material_info');
统一实例变量名后,当需要查找一个模型在哪些地方被使用到,一个模型的一个方法在哪些地方被调用时,可以通过简单的字符串搜索把调用位置找出来。

# 作用


把原本写得到处都是的数据库访问代码集中到一块,可以在一定程度上提高代码质量。
以团队的角度来说,因为所有数据库访问代码都住中到了一块,可以更方便地管理。
又因为数据库查询语句都是集中在一块,在需要对数据库进行优行分析将更方便,不需要在源代码的各处找各条查询语句。

yaf打造自己的api接口框架(细说model) 上一篇文章中我们一起研究学习了yaf的简单工作流程与控制器以及视图部分,然后在视图模板中打印输出了:hello,Controller!,也就是通过输出hello,Controller!的例子,我们把MVC中的,C与V过了一遍。还有M我们没有详细学习,那么今天我们一起来研究学习一下M吧,那么现在就开始吧。我眼中的MVC在开始之前,我想和大家一起聊聊我所认识的mvc三层架构。mvc这个概念在互联网上众... 阅读详情

相关推荐

PHP打造Modoer点评系统实战项目GBK版

本文还有配套的精品资源,点击获取 简介:本项目GBK版本涉及核心知识点包括PHP编程基础、MySQL数据库、MVC设计模式、session与cookie应用、系统安全性、错误处理与调试、GBK编码、用户界面设计、API集成和系统维护升级。通过开发Modoer点评系统,学习者将掌握构建动态网站、处理用户输入、数据库交互以及提升用户交互体验的技能,同时理解如何管理项目安全性和执...

weixin_42576186的博客 791

php mysql pdo 封装类_PHP封装的数据库模型Model类完整示例【基于PDO】

本文实例讲述了PHP封装的数据库模型Model类。分享给大家供大家参考,具体如下://引入配置文件include "../Config/config.php";class Model extends PDO{protected $tableName = "";//存储表名protected $sql = "";//存储最后执行的SQL语句protected $limit = "";//存储limi...

weixin_30698775的博客 351

PHP模型Model类封装数据库操作示例

主要介绍了PHP模型Model类封装数据库操作,结合实例形式分析了php使用mysqli封装的针对数据库操作相关实现与使用技巧,需要的朋友可以参考下

mysql最早出现的数据模型_常用的数据模型有哪些?特点是什么?

科技趣报道2019-09-19 16:59:36目前最常用的三种数据模型为层次模型、网状模型和关系模型。一、层次模型层次模型将数据组织成一对多关系的结构,层次结构采用关键字来访问其中每一层次的每一部分。优点是存取方便且速度快;结构清晰,容易理解;数据修改和数据库扩展容易实现;检索关键属性十分方便。二、网状模型网状模型用连接指令或指针来确定数据间的显式连接关系,是具有多对多类型的数据组织方式。优点是...

weixin_39664585的博客 1332

Vscode + QT + CMake:高效开发环境搭建全攻略

本文详细介绍了如何搭建Vscode+QT+CMake高效开发环境,涵盖环境安装、配置优化及项目创建全流程。通过整合Vscode的轻量化编辑、QT的跨平台GUI开发以及CMake的现代构建管理,该组合特别适合大型QT项目和跨平台开发团队,能显著提升开发效率。

weixin_30338481的博客 504

别再只设接触压力了!用ANSYS Workbench模拟O型圈密封泄漏的完整流程

本文详细介绍了在ANSYS Workbench中模拟O型圈密封泄漏的完整流程,重点解析了流体渗透压力载荷的设置与应用。通过双物理场耦合模型和精确的参数配置,帮助工程师准确评估密封性能,避免传统方法仅考虑接触压力的局限性。文章还提供了常见问题的解决方案和工程实践建议,提升密封设计的可靠性。

weixin_30372371的博客 399

php中model怎么写,thinkphp 中自定义model步骤

最近想用thinkPHP了,这也是听同事说的,说他比较简单,拿过来试一下,看了一遍文档,比较详细。后来继续用,便遇到了这个问题:在model中添加方法,因为很多和model相关的方法用的次数多,而且应该属于model‘管辖’,所以应该写在model类里面。按照惯例建好Model和Controller(我用的3.2),然后在Controller的某个function里面调用。下面上代码:use Th...

weixin_35410644的博客 691

Windows/Mac/Linux三系统保姆级教程:用llama.cpp将safetensors模型转gguf格式(附常见错误解决)

本文提供Windows、Mac和Linux系统下使用llama.cpp将safetensors模型转换为gguf格式的详细教程,涵盖环境配置、转换原理及常见错误解决方案。通过跨平台兼容性处理,帮助开发者高效完成模型格式转换,优化边缘计算性能。

weixin_29227425的博客 270

程序员必看之ThinkPHP5中model与Db的区别

作者:黑马程序员链接:https://zhuanlan.zhihu.com/p/58641972来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。在ThinkPHP5的使用过程中,很多使用者刚接触到数据库操作时,不能很好调用相关的方法进行数据库的交互。下面就分享一下ThinkPHP5中Db与模型的区别关于db与model的选择使用DB方式是直接获取到的query类(Th...

cpongo011702 2603

BPMN-JS :修改节点“Change Type”事件类型

修改路径:node_modules\bpmn-js\lib\features\replace\ReplaceOptions.js。

TaylorY的博客 678

医学影像处理实战:如何用Python+SimpleITK搞定DICOM/NIfTI重采样(附完整代码)

本文详细介绍了如何使用Python和SimpleITK库实现医学影像(DICOM/NIfTI格式)的智能重采样技术。通过实战代码演示,帮助读者掌握医学图像处理中的关键步骤,包括环境搭建、数据准备、核心算法实现和质量验证,解决医学AI领域中的影像标准化难题。

linux的博客 981

phpcms v9二次开发之数据模型类

系统模型类:model.class.php 数据模型类的位置:/phpcms/libs/classes        phpcms v9二次开发中,我们要经常需要对模块的数据表进行查询、添加、修改和删除数据等操作,所有这些操作都离不开数据模型类model.class.php,它起到开发者与数据表的交互作用。model.class.php里面封装了许多数据表操作的方法,基本上常用的mysql

didige2008的专栏 708

知识的定义与分类体系详解 - 从零基础到专业理解

知识的定义与分类体系详解 - 从零基础到专业理解

engchina的专栏 4363

phpcms image.class.php,【phpcms-v9】model.class.php文件分析-数据模型的基类

/*** model.class.php 数据模型基类** @copyright(C) 2005-2010 PHPCMS* @licensehttp://www.phpcms.cn/license/* @lastmodify2010-6-7*///路径:phpcms/libs/classes/model.class.php数据模型基类,所有的phpcms/model/文件夹下的所有model类都...

weixin_35510630的博客 151

MinerU与Docling:智能文档处理框架对比

本文对比分析了MinerU和Docling两大智能文档处理框架。MinerU专注于高精度PDF解析,采用多模态AI技术,在学术文献、金融报表等复杂文档处理上表现优异;Docling则定位企业级多格式文档处理平台,支持10+格式转换,更适合文档管理系统等场景。技术层面,MinerU基于VLM模型实现端到端处理,Docling采用插件化多后端架构。性能测试显示MinerU精度更高(95%+),但资源消耗较大;Docling处理速度更快(1-3秒/页),部署更灵活。

轩哥的个人研究和成长记录 1910

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

php yii2提示Database Exception – yii\db\Exception错误

参照YII2 advanced 高级版本项目搭建-添加API应用以及多应用中的方法创建了一个新的api应用,其中便自带gii工具。 但在yii2的gii工具中点Model Generator的Start来创建model时发现错误 提示: Database Exception – yii\db\ExceptionSQLSTATE[HY000] [2002] No such file or dir

peyogoat的博客 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

phpcmsv9源码学习:数据库model、foreground类

在PHPCMS二次开发中,PHP页面的代码

听海Movie的专栏 1264

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

php数据模型之资源类型,【phpcms-v9】model.class.php文件分析-数据模型的基类

/*** model.class.php 数据模型基类** @copyright(C) 2005-2010 PHPCMS* @licensehttp://www.phpcms.cn/license/* @lastmodify2010-6-7*///路径:phpcms/libs/classes/model.class.php数据模型基类,所有的phpcms/model/文件夹下的所有model类都...

weixin_35918734的博客 214

php+控制器+数据库,Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法_PHP...

本文实例讲述了Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法。分享给大家供大家参考,具体如下:前言:laravel创建数据库,实际可以手动创建,如古老的phpmyadmin 等均可以。一、数据库连接:在根目录(laravel5.1下面有个.env文件,如果没有则会有个.env.example然后将此文件修改成.env文件即可)打开文件:找到:DB_HOST=127.0...

weixin_29370183的博客 237

【phpcms-v9】model.class.php文件分析-数据模型的基类

[html] view plain copy  print? php    /**    *  model.class.php 数据模型基类    *    * @copyright           (C) 2005-2010 PHPCMS    * @license             http://www.phpcms.cn/license/  

Nikloas 705

ThinkPHP学习笔记(四)模型与数据库

继《 ThinkPHP学习笔记(三)输出》,上一篇描述了C如何传递数据到V,其中C传递是静态数据 $name='lizhongfu'; $this->assign('data',$name);,但实际中$name需要根据情况动态而定的,于需要从数据库获$name的值,而数据是MVC中M层,那C如何从M获取数据? 1、建立数据库db_thphp及数据表tp_use

阿福的专栏 2007

php 实现 model层,Thinkhphp5控制器调用的Model层的方法总结

控制器器里:/*** Created by PhpStorm.* User: Haima* Date: 2018/7/8* Time: 15:58*/namespace app\api\controller\v1;use app\api\model\Banner as BannerModel;use app\api\validate\IDMustBePostiveInt;use app\lib\e...

weixin_39584529的博客 421

phpcms V9 数据模型基类(转)

转自:http://www.cnblogs.com/Braveliu/p/5100421.html 在学习《phpcms V9首页模板文件解析》的第七步,我们看到content_model类,文件路径:phpcms/model/content_model.class.php 从代码中,可以得知content_model类继承于model类。那么model类又是什么呢? 下面请看数据...

dicuzhaoqin8950的博客 144
上一篇: php gerr 统一的错误处理 v0
下一篇: php source&instance(源&副本)的代码结构
gevolution90
博客等级 码龄18年 19粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值