一、连接数据库配置及Model数据模型层

1. Thinkphp\conf\convertion.php中找到数据库设置部分,复制到自己的配置文件中,并添加好有关数据库的内容

JiaoWu\Home\conf\config.php:

2. 制作model模型

a)  model本身就是一个类文件

b)  数据库中的每个数据表都对应一个model模型文件

c)  最简单的数据model模型类

在Home\Model文件夹中新建一个模型文件:InfoModel.class.php

  1. <?php
  2. namespace Home\Model;
  3. use Think\Model;
  4. class InfoModel extends Model
  5. {
  6.  
  7. }

3. 实例化Model的三种方式:

  1. $goods =  new  命名空间GoodsModel();
  2. $goods = D(‘模型标志’);

a)   $goods = D(“Goods”);

b)   该$goods是父类Model的对象,但是操作的数据表还是sw_goods

c)   $obj = D();  实例化Model对象,没有具体操作数据表,与M()方法效果一致

  1. $obj = M();

a)   实例化父类Model

b)   可以直接调用父类Model里边的属性,获得数据库相关操作

c)   自定义model就是一个空壳,没有必要实例化自定义model

d)  $obj = M(‘数据表标志’);  实例化Model对象,实际操作具体的数据表

  $obj = D(标志);

  $obj = D();

  $obj = M(标志);

  $obj = M();

D()和M()方法的区别:

  1. 前者是tp3.1.3里边对new操作的简化方法;

  2. 后者在使用就是实例化Model父类

3. 两者都在函数库文件定义ThinkPHP/Common/functions.php

注意:如果没有对应的model模型文件类,也可以直接实例化model对象进行操作

     D()和M()方法都可以实例化操作一个没有具体model模型类文件的数据表。

  1. function ShowAll()
  2. {
  3. //Model:数据库中每张表对应一个模型
  4. //类名是表名,类里面的成员变量是列名
  5. //把一张表对应为一个类,其中一条数据对应一个对象
  6.  
  7. //如果我们对该表的模型没有特殊操作的话可以不用建立该模型
  8.  
  9. //1.实例化model类
  10. $info=new \Home\Model\InfoModel();
  11. //var_dump($info);
  12.  
  13. //2.使用D()方法
  14. $info = D("Info");
  15. //var_dump($info);
  16.  
  17. //3.使用M()方法
  18. $car=M("Car");
  19. //var_dump($car);

二、数据查询

select()是数据模型的一个指定方法,可以获得数据表的数据信息

返回一个二维数组信息,当前数据表的全部数据信息

$obj = D();  创建对象

查询常使用的方法:

$obj -> select();  查询数据,使用select()会返回一个二维数组

$obj -> field(字段,字段);  查询指定字段

$obj -> table(数据表);   设置具体操作数据表

$obj -> where(参数);   参数就是正常sql语句where后边的条件信息

    例如:( “goods_price >100 and  goods_name like ‘三%’”)

$obj -> group(字段);  根据字段进行分组查询

$obj -> having(参数条件);  having 条件设置

$obj -> order(‘price  desc/asc’)  排序查询

$obj -> limit([偏移量,]条数)  限制查询的条数

$obj -> page()   分页类Page可以自动计算出每个分页的limit参数

    例如:$obj->page("1,10")->select(); // 查询第一页数据

       $obj->page("2,10")->select(); // 查询第二页数据

$obj ->find():如果我们查询的结果只有一个信息,为了使用方便我们会希望返回一个一维数组,这时候可使用find()方法

相关聚合函数: count()  sum()   avg()   max()   min()

以上聚合函数是最后被调用的方法

以上方法可以结合具体条件方法使用

例如:$goods -> where(‘goods_price >1000’)->count(); 大于1000元的商品的总数目

  1. //汽车表Car
  2. $car=M("Car");
  3. var_dump($info->select());//返回所有数据的二维数组 //使用TP框架时,建表是表名和列名最好都用小写
  4. $attr=$car->where("brand='b002'")->select();//where方法可以添加查询条件
  5.  
  6. $attr=$car->table("Nation")->select();//table方法可以切换操作表
  7. $attr=$car->field("name,code")->select();//指定查询的字段
  8.  
  9. $attr=$car->order("oil desc")->select();//排序
  10. $attr=$car->limit(2,2)->select();//分页查询,如果是一个参数是取前n个数据,两个数据是跳过几个取几个
  11. $attr=$car->page(3,2)->select();//分页查询,可以取第几页的n条数据
  12. $attr=$car->field("brand,count(*)")->group("brand")->select();//分组查询
  13. $attr=$car->join("brand on car.brand=brand.brand_code")->select();//连接查询
  14.  
  15. $attr=$car->distinct(true)->field("brand")->select();//distinct(true)去重
  16. $attr=$car->find("c001");//查一条数据,只根据主键值查,返回一维数组,不写主键值默认返回第一条
  17. $attr=$car->select();//根据主键值查多条数据,返回二位数组,
  18. $attr=$car->where("name like '%奥迪%'")->order("powers desc")->select();
  19. //var_dump($attr);
  20.  
  21. //聚合函数:可以放在最后
  22. $attr=$car->count();
  23. $attr = $car->avg("Price");
  24. echo $attr;

自己拿Info表做的练习:

  1. //info表
  2. $info=M("Info");
  3. var_dump($info);
  4. $attr=$info->select();
  5. $attr=$info->where("nation='n001'")->select();
  6. $attr=$info->table("Nation")->select();
  7. $attr=$info->field("sex,birthday")->select();
  8. $attr=$info->order("birthday")->select();
  9. $attr=$info->field("nation,count(*)")->group("nation")->select();
  10. $attr=$info->limit(1,2)->select();
  11. $attr=$info->page(2,3)->select();
  12. $attr=$info->join("nation on Info.Nation=Nation.Code")->select();
  13. $attr=$info->distinct(true)->field("birthday")->select();
  14. $attr=$info->find("p010");
  15. $attr=$info->select("p010,p120");
  16.  
  17. var_dump($attr);

如何在页面显示查询出的表格内容:

1. 在MainController.class.php控制器中写一个方法,实例化model,查询info表内容,然后注册到前端

  1. function ShowAll()
  2. {
  3. $info=M("Info");
  4. $attr=$info->select();
  5. $this->assign("shuju",$attr);
  6. $this->display();
  7. }

2.在View\Main中新建:ShowAll.html

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>无标题文档</title>
  6. </head>
  7.  
  8. <body>
  9. <h1>信息查询</h1>
  10. <table width="100%" cellpadding="0" cellspacing="0" border="1">
  11. <tr>
  12. <td>代号</td>
  13. <td>姓名</td>
  14. <td>性别</td>
  15. <td>民族</td>
  16. <td>生日</td>
  17. </tr>
  18.  
  19. <foreach name="shuju" item="v">
  20. <tr>
  21. <td><{$v.code}></td>
  22. <td><{$v.name}></td>
  23. <td><{$v.sex}></td>
  24. <td><{$v.nation}></td>
  25. <td><{$v.birthday}></td>
  26. </tr>
  27. </foreach>
  28. </table>
  29. </body>
  30. </html>

3.运行结果:

三、数据添加

add() 该方法返回被添加的新记录的主键id值

三种方式实现数据添加

  1. 数组方式数据添加

  $goods = D(“Goods”);

  $arr = array(‘goods_name’=>’iphone5s’,’goods_weight’=>’109’);

  //注意:goods_name和goods_weight是数据表中字段名称

  $goods -> add($arr);

  1. function Add()
  2. {
  3. //1.数组添加数据
  4. //要添加的数组,必须是关联数组,key必须为字段名称
  5. //方式一:
  6. $model=D("Info");
  7. $attr=array(
  8. "Code"=>"p100",
  9. "Name"=>"ww",
  10. "Sex"=>true,
  11. "Nation"=>"n001",
  12. "Birthday"=>"1999-01-01"
  13. );
  14. //方式二:
  15. $attr["Code"]="p111";
  16. $attr["Name"]="小豪";
  17. $attr["Sex"]=false;
  18. $attr["Nation"]="n003";
  19. $attr["Birthday"]="1993-08-20";
  20.  
  21. $model->add($attr);//添加数据的方法。需要参数,该参数是关联数组
      }

  2.  AR方式实现数据添加

  a)         ActiveRecord  活跃记录

  b)        AR规定了程序与数据库之间的关系

  c)         什么是AR:

  d)        ① 一个数据表对应一个类model

  e)         ② 一条数据记录对应类的一个对象

  f)         ③ 每个字段对应该对象的具体属性

  g)        tp框架的AR是假的

  $goods = D(“Goods”);

  $goods -> goods_name = “htc_one”;

  $goods -> goods_price = 3000;

  $goods -> add();

以上两种方式:数组、AR,最后add都要把新记录的主键id值返回

  1. function Add()
  2. {
  3. //2.AR方式实现数据添加(对象方式)
  4. //1.连接类 2.实体类 3.数据访问类
  5. $model=D("Info");
  6. $model->Code="p120";
  7. $model->Name="yuyu";
  8. $model->Sex=true;
  9. $model->Nation="n004";
  10. $model->Birthday="1999-9-9";
  11. $model->add();
  12. }

  3. 收集表单数据入库操作

  1. 制作一个表单
  2. 通过$_POST收集信息
  3. 通过create()方法实现数据收集,该方法对于非法的字段会自动进行过滤

注意:一个add控制器实现两个逻辑,一个是打出添加页面,一个是向数据库添加内容

通过一个例子来说明:

1. 在MainController.class.php控制器中写一个方法来接收并向数据库添加数据

  1. function All()
  2. {
  3. if(empty($_POST))
  4. {
  5. $nation=M("nation");
  6. $attr=$nation->select();
  7. $this->assign("shuju",$attr);
  8. $this->display();
  9. }
  10. else
  11. {
  12. $model=D("Info");
  13. $model->create();//自动收集表单数据入库
  14. $model->Sex=$_POST["Sex"]=="1"?true:false;
  15. $r=$model->add();
  16. if($r)
  17. {
  18. //添加成功跳转页面
  19. $this->success("添加数据成功!","Add",5);//5代表跳转时间,默认是3秒
  20. }
  21. else
  22. {
  23. //添加失败跳转页面
  24. $this->error("添加数据失败!","Add",5);
  25. }
  26. }

2.在View\Main中新建:ShowAll.html

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>无标题文档</title>
  6. </head>
  7.  
  8. <body>
  9. <!--自动收集表单数据入库操作 -->
  10. <!--注意大小写和数据库中的列名一致 -->
  11. <h2>添加数据</h2>
  12. <form action="__ACTION__" method="post">
  13. <div>代号:<input type="text" name="Code" /></div>
  14. <div>姓名:<input type="text" name="Name" /></div>
  15. <div>性别:<input type="radio" name="Sex" value="1" />
  16. <input type="radio" name="Sex" value="0" />
  17. </div>
  18. <div>民族:
  19. <select name="Nation">
  20. <foreach name="shuju" item="v">
  21. <option value="<{$v.code}>"><{$v.name}></option>
  22. </foreach>
  23. </select>
  24. </div>
  25. <div>生日:<input type="text" name="Birthday" /></div>
  26. <input type="submit" value="提交" />
  27.  
  28. </form>
  29. </body>
  30. </html>

3.运行结果:

若添加成功:

     ==>          ==>

若添加不成功:

      ==>       

注意:如果是主键值重复,这种错误会导致error()方法不跳转页面直接抛出错误信息,这是新版本问题,如果想要跳转,找到

Thinkphp 连接数据库、查询、添加的更多相关文章

  1. ThinkPHP视图查询详解

    ThinkPHP视图查询详解 参考http://www.jb51.net/article/51674.htm   这篇文章主要介绍了ThinkPHP视图查询,需要的朋友可以参考下     ThinkP ...

  2. Thinkphp中查询复杂sql查询表达式,如何表达MYSQL中的某字段不为空is not null?

    Thinkphp中查询复杂sql查询表达式,如何表达MYSQL中的某字段不为空is not null?先上两种实现方式的实例:$querys["house_type_image"] ...

  3. thinkphp 定位查询 Model:last您所请求的方法不存在!

    thinkphp 定位查询 Model:last您所请求的方法不存在!   用thinkphp3.1做项目的时候为了获取记录表中最后一个id用到了last()方法,出现了这个错误:Model:last ...

  4. ElasticSearch 学习记录之ES查询添加排序字段和使用missing或existing字段查询

    ES添加排序 在默认的情况下,ES 是根据文档的得分score来进行文档额排序的.但是自己可以根据自己的针对一些字段进行排序.就像下面的查询脚本一样.下面的这个查询是根据productid这个值进行排 ...

  5. ThinkPHP视图查询

    ThinkPHP视图查询 一.总结 1.这里的视图查询和多表查询很像,当然多表查询的话肯定要支持左右链接查询 2.view:视图的使用,关键字是view 3.sql视图功能支持:thinkphp支持视 ...

  6. thinkphp 组合查询

    组合查询的主体还是采用数组方式查询,只是加入了一些特殊的查询支持,包括字符串模式查询(_string).复合查询(_complex).请求字符串查询(_query),混合查询中的特殊查询每次查询只能定 ...

  7. thinkphp 快捷查询

    快捷查询方式是一种多字段查询的简化写法,可以进一步简化查询条件的写法,在多个字段之间用|分割表示OR查询,用&分割表示AND查询,可以实现下面的查询,例如: 大理石平台价格 一.不同字段相同的 ...

  8. 连接数据库查询 将查询结果写入exce文件中

    package com.cn.peitest.connectDatabase; import java.io.File; import java.lang.reflect.Field; import ...

  9. 6月16 ThinkPHP连接数据库及Model数据模型层--------查询及数据添加

    连接数据库配置及Model数据模型层 convertion.php config.php 1.在config.php做数据库连接配置 2.修改配置 /* 数据库设置 */ 'DB_TYPE' => ...

随机推荐

  1. WIN32程序挂钩SetLastError,输出错误描述到控制台

    WIN32程序挂钩SetLastError,输出错误描述到控制台 作者:徐灵甫 一.窗口模式应用程序(GUI)启用控制台的方法为: 步骤 方法 1 启动/关闭控制台 AllocConsole()Fre ...

  2. org/springframework/core/MethodClassKey

    解决下面报错的办法: 把pom.xml中下面两个dependency的version去掉. <dependency> <groupId>org.springframework& ...

  3. LaTeX排版工具使用

    专业的论文,都是用Latex.CTex等相关的工具.那么,用word写论文,缺点在哪? latex 写的东西,最终要编译成pdf格式的.里面的格式,尤其是数学类符号等,比较漂亮.这是word不能比的. ...

  4. PHP 错误提示

    HTTP/1.1 200 OKServer: nginxDate: Thu, 20 Jun 2013 03:06:10 GMTContent-Type: text/html; charset=utf- ...

  5. shell中$0,$?,$!等的特殊用法【转载】

    本文转载自:http://blog.sina.com.cn/s/blog_464f6dba0100psy9.html ----------------------------------------- ...

  6. fstream的用法

    本文转载自 http://www.newxing.com/Tech/Program/Cpp/577.html   C++文件流:fstream // 文件流ifstream  // 输入文件流ofst ...

  7. js的简单模板解析

    在编程中总是会遇见很多动态生成的东西,一般我们都是通过简单的html拼接起来的 function createHtml(name, phone, addr, email, imageSrc){ var ...

  8. 使用MyEclipse搭建java Web项目开发

    转自:http://blog.csdn.net/jiuqiyuliang/article/details/36875217 首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成 ...

  9. 数据库 —— 使用JDBC操作数据库

    [Link] http://www.developer.com/java/data/manipulating-a-database-with-jdbc.html Manipulating a Data ...

  10. SKEffectNode类

    继承自 SKNode:UIResponder:NSObject 符合 NSCoding(SKNode)NSCopying(SKNode)NSObject(NSObject) 框架  /System/L ...