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

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

JiaoWu\Home\conf\config.php:

2. 制作model模型

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

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

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

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

<?php
namespace Home\Model;
use Think\Model;
class InfoModel extends Model
{ }

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模型类文件的数据表。

 function ShowAll()
{
//Model:数据库中每张表对应一个模型
//类名是表名,类里面的成员变量是列名
//把一张表对应为一个类,其中一条数据对应一个对象 //如果我们对该表的模型没有特殊操作的话可以不用建立该模型 //1.实例化model类
$info=new \Home\Model\InfoModel();
//var_dump($info); //2.使用D()方法
$info = D("Info");
//var_dump($info); //3.使用M()方法
$car=M("Car");
//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元的商品的总数目

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

自己拿Info表做的练习:

 //info表
$info=M("Info");
var_dump($info);
$attr=$info->select();
$attr=$info->where("nation='n001'")->select();
$attr=$info->table("Nation")->select();
$attr=$info->field("sex,birthday")->select();
$attr=$info->order("birthday")->select();
$attr=$info->field("nation,count(*)")->group("nation")->select();
$attr=$info->limit(1,2)->select();
$attr=$info->page(2,3)->select();
$attr=$info->join("nation on Info.Nation=Nation.Code")->select();
$attr=$info->distinct(true)->field("birthday")->select();
$attr=$info->find("p010");
$attr=$info->select("p010,p120"); var_dump($attr);

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

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

 function ShowAll()
{
$info=M("Info");
$attr=$info->select();
$this->assign("shuju",$attr);
$this->display();
}

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

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head> <body>
<h1>信息查询</h1>
<table width="100%" cellpadding="0" cellspacing="0" border="1">
<tr>
<td>代号</td>
<td>姓名</td>
<td>性别</td>
<td>民族</td>
<td>生日</td>
</tr> <foreach name="shuju" item="v">
<tr>
<td><{$v.code}></td>
<td><{$v.name}></td>
<td><{$v.sex}></td>
<td><{$v.nation}></td>
<td><{$v.birthday}></td>
</tr>
</foreach>
</table>
</body>
</html>

3.运行结果:

三、数据添加

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

三种方式实现数据添加

  1. 数组方式数据添加

  $goods = D(“Goods”);

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

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

  $goods -> add($arr);

 function Add()
{
//1.数组添加数据
//要添加的数组,必须是关联数组,key必须为字段名称
//方式一:
$model=D("Info");
$attr=array(
"Code"=>"p100",
"Name"=>"ww",
"Sex"=>true,
"Nation"=>"n001",
"Birthday"=>"1999-01-01"
);
//方式二:
$attr["Code"]="p111";
$attr["Name"]="小豪";
$attr["Sex"]=false;
$attr["Nation"]="n003";
$attr["Birthday"]="1993-08-20"; $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值返回

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

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

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

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

通过一个例子来说明:

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

 function All()
{
if(empty($_POST))
{
$nation=M("nation");
$attr=$nation->select();
$this->assign("shuju",$attr);
$this->display();
}
else
{
$model=D("Info");
$model->create();//自动收集表单数据入库
$model->Sex=$_POST["Sex"]=="1"?true:false;
$r=$model->add();
if($r)
{
//添加成功跳转页面
$this->success("添加数据成功!","Add",5);//5代表跳转时间,默认是3秒
}
else
{
//添加失败跳转页面
$this->error("添加数据失败!","Add",5);
}
}

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head> <body>
<!--自动收集表单数据入库操作 -->
<!--注意大小写和数据库中的列名一致 -->
<h2>添加数据</h2>
<form action="__ACTION__" method="post">
<div>代号:<input type="text" name="Code" /></div>
<div>姓名:<input type="text" name="Name" /></div>
<div>性别:<input type="radio" name="Sex" value="1" />男
<input type="radio" name="Sex" value="0" />女
</div>
<div>民族:
<select name="Nation">
<foreach name="shuju" item="v">
<option value="<{$v.code}>"><{$v.name}></option>
</foreach>
</select>
</div>
<div>生日:<input type="text" name="Birthday" /></div>
<input type="submit" value="提交" /> </form>
</body>
</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. Extjs4 中在指定光标处插入值

    var rulearea = Ext.getCmp(文本域Id); var rulevalue = rulearea.getValue();// 获取文本textarea 里面的值 var start ...

  2. 【二分】XMU 1587 中位数

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1587 题目大意: 求两个长度为n(n<=109)的有序序列合并后的中位数.序列中 ...

  3. datagridview的数据源的操作

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  4. [Java] 类的初始化步骤

    前言 类的初始化过程,可在多线程环境下进行的,为了简化,本文介绍的单线程情况下的类初始化步骤. 此外,继承情况下的顺序不是本文焦点,本文重点在于一个类的内部字段的初始化顺序.想了解继承情况下的初始化情 ...

  5. 大龄剩女四大结局:孤寡 后妈 拉拉 出家 宽带山KDS-宽带山社区-第一城市消费门户

    大龄剩女四大结局:孤寡 后妈 拉拉 出家 宽带山KDS-宽带山社区-第一城市消费门户 主题:大龄剩女四大结局:孤寡 后妈 拉拉 出家

  6. Exception in thread "main" com.sun.xml.internal.ws.streaming.XMLStreamReaderException: unexpected XML tag.

    webservice 抛异常,原因: public class HeaderHandler implements SOAPHandler<SOAPMessageContext>{ @Ove ...

  7. shell编程(一)--常用变量及表达式

    $? 表示执行上一个命令的返回值:如果为0表示执行成功,非0表示执行失败$1.$2.... 分别表示参数1.参数2....$# 表示这个程序的参数个数$*/$@ 表示这个程序的所有参数$$ 表示这个程 ...

  8. uva 10555 - Dead Fraction)(数论)

    option=com_onlinejudge&Itemid=8&category=516&page=show_problem&problem=1496" st ...

  9. 【前端JS】input textarea 默认文字,点击消失

    如题.前端页面的 input textarea 有时候须要显示默认文字以提示用户,下面为实现代码,以 input 为例.textarea 能够直接搬用 HTML <input type=&quo ...

  10. ASSERT_VALID和ASSERT宏分析

    这个宏都是MFC的调试宏. ASSERT_VALID宏用来在运行时检查一个对象的内部合法性,比如说现在有一个学生对象,我们知道每个学生的年龄一定大于零,若年龄小于零,则该学生对象肯定有问题. 事实上, ...