thinkphp的model模型的设计经验总结

Wesley13
• 阅读 659

关于模型;跟上篇文章thinkphp的目录结构设计经验总结写控制器一个道理;为了尽量避免改动到框架;

首先我们是要有一个BaseModel.class.php作为我们的基础model;

我会在BaseModel中定义增删改的方法如下;

add($data);         return $id;     }          /\*\*      \* 修改数据      \* @param    array    $map    where语句数组形式       \* @param    array    $data   修改的数据       \* @return    boolean         操作是否成功      \*/     public function editData($map,$data){         $result=$this->where($map)->save($data);         return $result;     }          /\*\*      \* 删除数据      \* @param    array    $map    where语句数组形式      \* @return   boolean          操作是否成功      \*/     public function deleteData($map){         $result=$this->where($map)->delete();         return $result;     } } 为每张表都建一个model;统一放在/Application/Common/Model/目录下即可; 然后所有的模型都继承BaseModel; 以后的增增删改如果没有特殊的需求;就可以直接调用addData、editData、deleteData; 如果有特殊需求的;就在model中重新定义以上方法; 这样的实际意义就等于在不改动框架的model的前提下扩展了model中的方法; 重点想说的是;所有的增删改;都统一用D函数而不要用M函数实例化model然后调用这3个方法; 这样做的好处是;当以后改表了;不用全世界的去找都那些地方调用了add、save、delete一一去改; 增删改都说了;那至于查; 1:强烈建议所有的where条件统一使用数组格式的;避免使用字符串格式的where; 2:竖着排版; ![白俊遥博客](http://www.baijunyao.com/Upload/image/ueditor/20160318/1458315912280019.png) 竖着排列;要明显优于横着排序;自行对比上下那种更便于阅读;高下立见; ![白俊遥博客](http://www.baijunyao.com/Upload/image/ueditor/20160318/1458316012654476.png) 3:固定按照 field、alias、join、where、order、limit 、select ;      为什么要按照这个顺序呢?因为这跟我们正常拼sql的顺序一致; SELECT     u.id,     s.\* FROM     bjy\_student AS s JOIN bjy\_users AS u ON s.uid = u.id WHERE     s. STATUS = 1 ORDER BY     date LIMIT 10; 4:join表的时候;起别名统一使用表的第一个字母;如果两张表的第一个字母一样;那就前两个字母;依次类推;     这样规范了以后;将大大提高检查阅读代码的效率; 本文为白俊遥原创文章,转载无需和我联系,但请注明来自[白俊遥博客](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fwww.baijunyao.com%2F)http://www.baijunyao.com
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
thinkphp整合系列之友盟消息推送
上篇文章 thinkphp集成系列之phpmailer批量发送邮件(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fbaijunyao.com%2Farticle%2F69)讲过的;邮件有着零成本、内容丰富的优点;但是一个非常硬的硬伤;这家伙的及时性太差了;尤其是随着90、00
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这