一、连接数据库配置及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. COJ 0580 4021征兵方案

    4021征兵方案 难度级别: C: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 现在需要征募女兵N人,男兵M人,每征募一个人 ...

  2. Javascript语法基础

    Javascript语法基础   一.基本数据类型   JavaScript中支持数字.字符串和布尔值三种基本数据类型: 1.数字 数字型是JavaScript中的基本数据类型.在JavaScript ...

  3. Convert Sorted Array to Binary Search Tree——LeetCode

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 题目 ...

  4. Java:Date、Calendar、Timestamp的区别、相互转换与使用【转载】

    1 Java.util.Date 包含年.月.日.时.分.秒信息 包含年.月.日信息. 继承自java.util.Date.在数据库相关操作中使用,如rs.getDate,ps.setDate等.rs ...

  5. 尚学堂 JAVA Day3 概念总结

    java中的运算符 1.算术运算符 + - * / % Arithmetic operators + 运算符有三种身份 Additive Operator 1)加法:如 a + b; 2)连接:如 “ ...

  6. D - 棋盘游戏 - HDU 1281(二分图匹配)

    分析:先求出来最大匹配数,然后用匹配的点一个一个去除看看能否达到最大匹配,能的话就是关键点(很暴力啊),不过竟然才31ms ************************************** ...

  7. java vm内存设置

    1.普通java应用程序,使用java命令运行,  java -Xms1024m -Xmx1024m -XX:MaxNewSize=256m  -XX:MaxPermSize=256m -jar 2. ...

  8. ORACLE的RMAN

    1.什么是RMAN? RMAN可以用来备份和还原数据库文件.归档日志和控制文件.它也可以用来执行完全或不完全的数据库恢复. 注意:RMAN不能用于备份初始化参数文件和口令文件. RMAN启动数据库上的 ...

  9. Column count of mysql.proc is wrong. Expected 20, found 16. Created with MySQL 50096, now running 50173.

    IDEA链接mysql提示 Column count of mysql.proc is wrong. Expected 20, found 16. Created with MySQL 50096, ...

  10. 使用CSS为内容设定特定的鼠标样式(cursor)介绍

    相信大家都知道我们的鼠标在网页中不同的元素中有不同的显示(例如 a 元素就显示为“箭头指针”),但是其实我们还可以自定义这些有趣的东西哦!今天“畅想资源”就来教大家如何使用CSS为内容设定特定的鼠标样 ...