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

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

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

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

<?php namespace Common\\Model; use Think\\Model; /\*\*  \* 基础model  \*/ class BaseModel extends Model{     /\*\*      \* 添加数据      \* @param    array    $data    数据       \* @return   integer           新增数据的id       \*/     public function addData($data){         $id=$this->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
点赞
收藏

评论区

加载中...

相关推荐

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

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )