>

翻看数据库的链接状态,而把大家自定义的 Mod

- 编辑:银河国际手机客户端 -

翻看数据库的链接状态,而把大家自定义的 Mod

 1 <?php
 2 namespace AdminModel;
 3 use ThinkModel;
 4 
 5 /**
 6  * 项目中其他 Model 类的基类
 7  * 该类继承自 TP 提供的基类 Model
 8  */
 9 class BaseModel extends Model {
10     
11     /**
12      * 继承基类 Model 的 add 方法
13      * 自动插入 id create_by create_date update_by update_date del_flag
14      */
15     public function add($data='',$options=array(),$replace=false) {
16         
17         $data["id"]          = $this->getUuid();
18         $data["create_by"]   = "";
19         $data["create_date"] = date("Y-m-d H:i:s");
20         $data["update_by"]   = "";
21         $data["update_date"] = date("Y-m-d H:i:s");
22         $data["del_flag"]    = '0';
23         
24         return parent::add($data, $options, $replace);
25     }
26     
27     /**
28      * 获得 未删除 的所有数据
29      * 记录是否被删除通过 del_flag 字段来进行确定
30      */
31     public function select($options=array()) {
32         $map["del_flag"] = 0;
33         $this->where($map);
34         
35         return parent::select($options);
36     }
37     
38     /**
39      * 获取 全部 的所有数据
40      */
41     public function selectAll($options=array()) {
42         return parent::select($options);
43     }
44     
45     /**
46      * 更新数据
47      * 更新数据时,要更新 update_by update_date 两个字段
48      */
49     public function save($data='',$options=array()) {
50         $data["update_by"]   = "";
51         $data["update_date"] = date("Y-m-d H:i:s");
52         
53         return parent::save($data, $options);
54     }
55     
56     /**
57      * 删除也是更新
58      * 设置 删除 标志位即可
59      */
60     public function delete($data='',$options=array()) {
61         $data["del_flag"] = 1;
62         
63         return parent::save($data, $options);
64     }

create() 方法是贯穿操作、CUXC90D 操作的会集 ( 包蕴数据成立、数据印证、表单验证、自动完毕等 )。

 

<?php    class IndexAction extends Action {            public function post(){            $articleObj = D("Article");          $data['title'] = $_POST['subject'];          $data['content'] = $_POST['textEdit'];          $data['add_time'] = date("Y-m-d H:i:s",time());            if($articleObj->data($data)->add()){                $this->success("数据添加成功");          }else{                $this->error("数据添加失败");          }      }  }

   ThinkPHP 提供了贰个 Model 类,供别的的 Model 进行一而再。Model 类中是 MVC 中的模型类,它是调用 悠久层 的上层类。以为那样描述难题多多,然则有啥样措施吗?可是,这些 Model 一时无法满足大家的一部分需要,因而我们必要自定义多少个 Model 类出来,可是自定义的 Model 同样要继续 TP 提供的 Model 类,而把大家自定义的 Model 类作为大家项目中的 Model 基类。笔者怎么认为作者在说绕口令,等等...笔者有一点晕。

4.模型属性( Model )

  那样,在我们用 D 方法实例化 TrunkModel 的目的后,使用 add 方法插入数据时,就能够先调用 BaseModel 中的 add 方法了,那样大家每张表都有些 create_by 等一连串字段就都会活动获得了。

控制器:IndexAction,动作:add_article,代码:

 

③ 读取数据 select 和 getFiled

 

D 函数用于飞速实例化自定义模型,能够张开复杂的数据库操作,举个例子数据印证、数据缓存、数据加工等。自定义模型寄存在 Lib/Model 目录下,比方为多少表 tpk_article 数据表建模映射,则必要创制 ArticleModel.class.php,然后使用 D 函数举办实例化,ArticleModel 模型将与 tpk_article 表举办映射。

  定义代码如下:

IndexAction.class.php:

  自定义一个 Model,Model 中足足重新 TP 提供的 Model 中的 add、save、delete 和 select 方法。

 

  在选择 Java 的开源项目 JeeSite 时,养成了三个不佳的习贯,习于旧贯给每张表都扩大create_by、create_date、update_by、update_date、remarks 和 del_flag 这么多少个字段。如若每张表都有那多少个字段,那么对每张表进行 insert 时都会对以上的字段举办设置,对每张表进行 update 时都会对个中一些字段张开立异,对每条记下进行 delete 时都其实是对 del_flag 字段进展 置位。重复操作相当多,一些操作方法被涂改。那么,这年将要自定义一个和好的 Model 来作为项目标 基类 了,这一个 Model 就承受干上面作者说的这一个事情了。

<!DOCTYPE html>  <html>  <body>    <volist name="list" id="vo">      <li><{$vo.title}> - <{$vo.area}> - <{$vo.content}></li>  </volist>    </body>  </html>
1 <?php
2 namespace AdminModel;
3 use AdminModelBaseModel;
4 
5 class TrunkModel extends BaseModel {

例子:

 

array(6) {    [0] => array(7) {      ["id"] => string(1) "1"      ["title"] => string(4) "test"      ["content"] => string(12) "test_content"      ["category"] => string(13) "test_category"      ["area"] => string(6) "北京"      ["add_user"] => string(5) "admin"      ["add_time"] => string(19) "2014-11-20 23:03:44"    }    [1] => array(7) {      ["id"] => string(1) "2"      ["title"] => string(12) "吼吼吼吼"      ["content"] => string(18) "任溶溶柔然人"      ["category"] => string(14) "test_category2"      ["area"] => string(6) "河北"      ["add_user"] => string(5) "admin"      ["add_time"] => string(19) "2014-11-22 15:16:12"    }    [2] => array(7) {      ["id"] => string(1) "4"      ["title"] => string(7) "test2_m"      ["content"] => string(4) "haha"      ["category"] => string(0) ""      ["area"] => string(6) "福建"      ["add_user"] => NULL      ["add_time"] => string(19) "2014-11-22 11:44:26"    }    [3] => array(7) {      ["id"] => string(1) "5"      ["title"] => string(2) "22"      ["content"] => NULL      ["category"] => string(0) ""      ["area"] => string(6) "福建"      ["add_user"] => NULL      ["add_time"] => string(19) "2014-11-22 12:40:58"    }    [4] => array(7) {      ["id"] => string(1) "6"      ["title"] => string(1) "1"      ["content"] => string(1) "2"      ["category"] => string(0) ""      ["area"] => string(6) "福建"      ["add_user"] => NULL      ["add_time"] => NULL    }    [5] => array(7) {      ["id"] => string(1) "7"      ["title"] => string(6) "lalala"      ["content"] => string(6) "hohoho"      ["category"] => string(0) ""      ["area"] => string(6) "北京"      ["add_user"] => NULL      ["add_time"] => NULL    }  }

自定义一个 Model

object(Model)#5 (20) {    ["_extModel:private"] => NULL    ["db:protected"] => object(DbMysql)#7 (18) {      ["dbType:protected"] => string(5) "MYSQL"      ["autoFree:protected"] => bool(false)      ["model:protected"] => string(7) "_think_"      ["pconnect:protected"] => bool(false)      ["queryStr:protected"] => string(28) "SHOW COLUMNS FROM `tpk_user`"      ["modelSql:protected"] => array(1) {        ["user"] => string(28) "SHOW COLUMNS FROM `tpk_user`"      }      ["lastInsID:protected"] => NULL      ["numRows:protected"] => int(2)      ["numCols:protected"] => int(0)      ["transTimes:protected"] => int(0)      ["error:protected"] => string(0) ""      ["linkID:protected"] => array(1) {        [0] => resource(27) of type (mysql link)      }      ["_linkID:protected"] => resource(27) of type (mysql link)      ["queryID:protected"] => resource(28) of type (mysql result)      ["connected:protected"] => bool(true)      ["comparison:protected"] => array(10) {        ["eq"] => string(1) "="        ["neq"] => string(2) "<>"        ["gt"] => string(1) ">"        ["egt"] => string(2) ">="        ["lt"] => string(1) "<"        ["elt"] => string(2) "<="        ["notlike"] => string(8) "NOT LIKE"        ["like"] => string(4) "LIKE"        ["in"] => string(2) "IN"        ["notin"] => string(6) "NOT IN"      }      ["selectSql:protected"] => string(96) "SELECT%DISTINCT% %FIELD% FROM %TABLE%%JOIN%%WHERE%%GROUP%%HAVING%%ORDER%%LIMIT% %UNION%%COMMENT%"      ["bind:protected"] => array(0) {      }    }    ["pk:protected"] => string(2) "id"    ["tablePrefix:protected"] => string(4) "tpk_"    ["name:protected"] => string(4) "user"    ["dbName:protected"] => string(0) ""    ["connection:protected"] => string(0) ""    ["tableName:protected"] => string(0) ""    ["trueTableName:protected"] => string(8) "tpk_user"    ["error:protected"] => string(0) ""    ["fields:protected"] => array(5) {      [0] => string(2) "id"      [1] => string(8) "username"      ["_autoinc"] => bool(true)      ["_pk"] => string(2) "id"      ["_type"] => array(2) {        ["id"] => string(7) "int(11)"        ["username"] => string(11) "varchar(20)"      }    }    ["data:protected"] => array(0) {    }    ["options:protected"] => array(0) {    }    ["_validate:protected"] => array(0) {    }    ["_auto:protected"] => array(0) {    }    ["_map:protected"] => array(0) {    }    ["_scope:protected"] => array(0) {    }    ["autoCheckFields:protected"] => bool(true)    ["patchValidate:protected"] => bool(false)    ["methods:protected"] => array(13) {      [0] => string(5) "table"      [1] => string(5) "order"      [2] => string(5) "alias"      [3] => string(6) "having"      [4] => string(5) "group"      [5] => string(4) "lock"      [6] => string(8) "distinct"      [7] => string(4) "auto"      [8] => string(6) "filter"      [9] => string(8) "validate"      [10] => string(6) "result"      [11] => string(4) "bind"      [12] => string(5) "token"    }  }

  承接的 BaseModel 的秘诀和后续 Model 的章程是同等的,只是利用 use 引进命名空间到如今服从域时的须要修改为我们的命名空间,并不是再去选取 TP 提供的命名空间。代码如下:

 

  use 引进的命名空间是 AdminModelBaseModel ,因为我们定义的 BaseModel 的命名空间是 AdminModel,因为那边的 TrunkModel 和 BaseModel 在多个命名空间下,省去 use 也是能够的。

//TP 恶补ing... 

此伏彼起我们定义的基类

控制器:IndexAction.class.php:

  那样,大家的 BaseModel 就定义好了,未来项目中的 Model 就不再接续 TP 的 Model 类了,而是继续大家自定义的 BaseModel 了。

 _map 属性:字段映射

百无聊赖的急需

事例结束。

参谋资料:《PHP MVC 开垦实战》

① 成立数量 add()

视图:Tpl/Index/add_article.html:

$rows=$obj->where("add_user='dee'")->order("add_time desc")->limit(10)->select();

二、基础模型

 

1.模型映射

浏览器输出:

<!DOCTYPE html>  <html>  <body>        <form method="post" action="__URL__/add">            <input type="text" name="title" placeholder="标题"><br><br>          <textarea name="content" id="content" placeholder="内容"></textarea><br><br>          <input type="submit" name="submit" value="提交">        </form>    </body>  </html>

图片 1

概念:数据对象 —— 数据字段与数据表之间的涉及,数据会被映射为类成员,再与数码表映射,最终达成多少的插入或更新。

3.查询语言

<?php  class IndexAction extends Action {        $obj=D("Article");      $rows=$obj->article();      $this->assign("list",$rows);      $this->display();
<?php  class ArticleModel extends Model{        //使用_map属性(字段映射)将表单元素映射为相应表字段      protected $_map = array(                    "subject"=>"title",          "textEdit"=>"content"      );    }

一、定义数据表模型

例:

1.连贯操作

<?php    class IndexAction extends Action {            public function post(){            $articleObj = D("Article");          $data['title'] = $_POST['subject'];          $data['content'] = $_POST['textEdit'];          $data['add_time'] = date("Y-m-d H:i:s",time());          if($articleObj->add($data)){                $this->success("数据添加成功");          }else{                $this->error("数据添加失败");          }      }  }

__URL__/add 表示近些日子调节器的 add 动作。

 

<?php    class IndexAction extends Action {            $articleObj = D("Article");          $articleObj->create();          $articleObj->add_time = date("Y-m-d H:i:s",time());          if($articleObj->add()){                        $this->success("数据添加成功");          }else{                        $this->error("数据添加失败");          }  }

3.create 方法

 

计算:自定义模型映射,三个模子对应多个数据表,全体增加和删除改查都在模型类中产生。M 实例化的参数是数据库的表名,D 实例化的是温馨在 model 文件夹下创建的模型文件。

IndexAction.class.php:

2.自定义模型

 

④ 删除数据 delete

视图: Tpl/Index/add_article.html:

 

 

getField 例子:

TPL/Index/article.html:

假如未有提醒错误即为成功。

<?php  class IndexAction extends Action {        Public function add_article(){            $this->display();      }  }
class IndexAction extends Action {          public function article(){        $obj=D("Article");      $rows=$obj->select();                  dump($rows);     }  }

调控器代码:

public function testdb(){        $obj=M("User");      dump($obj);  }
<?php    class IndexAction extends Action {      public function post2(){            $articleObj = M("Article");          $data['id'] = 2;          $data['title'] = $_POST['subject'];          $data['content'] = $_POST['textEdit'];          $data['area'] = '河北';          $data['add_time'] = date("Y-m-d H:i:s",time());          if($articleObj->save($data)){                $this->success("数据修改成功");          }else{                $this->error("数据修改失败");          }      }  }

另二个例证:

可以在调整器中使用 echo $obj->getLastSql(); 查看调换后的 SQL 语句。

TP 对数码的插入和翻新都做了惊人封装:提供了 create() 方法用于成立数量对象。

 

 

 

M("User") 正是模型映射,M 函数等于 new Model() ,Model 类是模型的基类,也是数据库操作的基类, "User" 是此类的三个成员属性,表示模型名称,模型名称与数据库中的数据表进行映射。注意:User "U" 要大写,数据库中此时应当留存一张 user 表,系统会基于陈设文件中的设置给 user 表加多前缀,比如tpk_user。借使不必要为表增加前缀,将模型名称首字母改为小写,举例M("user")。

ArticleModel.class.php:

<?php  class IndexAction extends Action {        public function add(){            //表单处理          $articleObj = M('Article');          $articleObj->create();          $articleObj->add_time = date("Y-m-d H:i:s",time());          if($articleObj->add()){                $this->success("数据添加成功");          }else{                $this->error("数据添加失败");          }  }

事例截至。

要测验数据库是不是正规连接,最直接的秘技便是在当下调控器中实例化数据表,然后选择dump 函数输出,查看数据库的链接状态。代码:

为了制止前台表单成分与数据库字段名同样而使数据库字段暴露,能够修改前台表单成分的 name,同期在 Model 中采纳 _map 属性。代码:

图片 2图片 3

 

那会儿浏览器输出:

<?php    class IndexAction extends Action {        public function post3(){            $articleObj = M("Article");          if($articleObj->where("id=3")->setField("content","{$_POST['subject']}")){                $this->success("数据修改成功");          }else{                $this->error("数据修改失败");          }      }  }
<?php    class IndexAction extends Action {            public function delete(){            $articleObj = M("Article");          if($articleObj->where("id=".$_GET['id'])->delete()){                $this->success("数据删除成功");          }else{                $this->error("数据删除失败");          }      }  }

例:增加数据

 

<!DOCTYPE html>  <html>  <body>        <form method="post" action="__URL__/add">            <input type="text" name="subject" placeholder="标题"><br><br>          <textarea name="textEdit" id="content" placeholder="内容"></textarea><br><br>           <input type="submit" name="submit" value="提交">        </form>    </body>  </html>

模型:ArticleModel.class.php:

<?php    class IndexAction extends Action {        public function archives(){            $obj = M("Archives");  //      $data['writer'] = array("eq","网络营销中心");  //      $data['title'] = array("like","精诚%");          $data['id'] = array("lt","100");          $rows=$obj->where($data)->select();            $count=$obj->where($data)->count();          $tb=C("DB_PREFIX");            $this->assign("list",$rows);          $this->assign("count",$count);          $this->assign("tb",$tb);          $this->display("Article");      }            public function archives2(){            $obj = M("Archives");          $data['id'] = array(array("lt","1034"),array("GT","1029"),"and");          $rows=$obj->where($data)->select();          $this->assign("list",$rows);          $this->display("Article");      }  }

例2:让 tpk_article 表的内容据他们说客商所在的地带显示当地的情报:

图片 4图片 5

2.CURD

<?php  class ArticleModel extends Model{            public function article(){                $rows=$this->where("area='{$this->checkUserArea()}'")->select();          return $rows;      }        protected function checkUserArea(){                return "北京";          }

add 动作代码:

例:使用 select() 输出 tpk_article 表的数据 ( select() 方法用于列出装有切合条件的数据 ) :

cerate() 的数据源由 POST 表单提供,譬喻表单中有 username 表单成分,则该因素会被电动映射为数量表中的 username 字段。数据对象创立成功现在,对象被寄放在于内部存款和储蓄器中。

附:数据表 tpk_article 的表结构为:

 

② 更新数据 save()

贯通方法除了 select() 方法外,别的的贯通方法不区分前后相继。

相同的时间视图代码:

本文由编程知识发布,转载请注明来源:翻看数据库的链接状态,而把大家自定义的 Mod