Thinkphp教程:连接数据库配置及Model数据模型层、查询、添加

2019-03-2821:02:29后端程序开发Comments2,858 views字数 5112阅读模式

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

1. Thinkphp\conf\中找到数据库设置部分,复制到自己的配置文件中,并添加好有关数据库的内容文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

JiaoWu\Home\conf\config.php:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

Thinkphp教程:连接数据库配置及Model数据模型层、查询、添加文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

2. 制作model模型文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

a)  model本身就是一个类文件文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

b)  数据库中的每个数据表都对应一个model模型文件文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

c)  最简单的数据model模型类文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

在Home\Model文件夹中新建一个模型文件:InfoModel.class.php文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

Thinkphp教程:连接数据库配置及Model数据模型层、查询、添加文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

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

3. 实例化Model的三种方式:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

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

a)   $goods = D(“Goods”);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

b)   该$goods是父类Model的对象,但是操作的数据表还是sw_goods文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

c)   $obj = D();  实例化Model对象,没有具体操作数据表,与M()方法效果一致文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

  1. $obj = M();

a)   实例化父类Model文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

b)   可以直接调用父类Model里边的属性,获得数据库相关操作文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

c)   自定义model就是一个空壳,没有必要实例化自定义model文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

d)  $obj = M(‘数据表标志’);  实例化Model对象,实际操作具体的数据表文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$obj = D(标志);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$obj = D();文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$obj = M(标志);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$obj = M();文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

D()和M()方法的区别:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

1. 前者是里边对new操作的简化方法;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

2. 后者在使用就是实例化Model父类文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

3. 两者都在函数库文件定义ThinkPHP/Common/文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

注意:如果没有对应的model模型文件类,也可以直接实例化model对象进行操作文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

D()和M()方法都可以实例化操作一个没有具体model模型类文件的数据表。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

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()是数据模型的一个指定方法,可以获得数据表的数据信息文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

返回一个二维数组信息,当前数据表的全部数据信息文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$obj = D();  创建对象文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

查询常使用的方法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$obj -> select();  查询数据,使用select()会返回一个二维数组文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$obj -> field(字段,字段);  查询指定字段文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$obj -> table(数据表);   设置具体操作数据表文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$obj -> where(参数);   参数就是正常sql语句where后边的条件信息文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

例如:( “goods_price >100 and  goods_name like ‘三%’”)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$obj -> group(字段);  根据字段进行分组查询文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$obj -> having(参数条件);  having 条件设置文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$obj -> order(‘price  desc/asc’)  排序查询文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$obj -> limit([偏移量,]条数)  限制查询的条数文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$obj ->page()   分页类Page可以自动计算出每个分页的limit参数文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

例如:$obj->page("1,10")->select();// 查询第一页数据文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

       $obj->page("2,10")->select();// 查询第二页数据文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$obj ->find():如果我们查询的结果只有一个信息,为了使用方便我们会希望返回一个一维数组,这时候可使用find()方法文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

相关聚合函数: count()  sum()   avg()   max()   min()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

以上聚合函数是最后被调用的方法文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

以上方法可以结合具体条件方法使用文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

例如:$goods -> where(‘goods_price >1000’)->count(); 大于1000元的商品的总数目文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

//汽车表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表做的练习:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

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

1. 在控制器中写一个方法,实例化model,查询info表内容,然后注册到前端文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

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

2.在View\Main中新建:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

3.运行结果:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

Thinkphp教程:连接数据库配置及Model数据模型层、查询、添加文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

三、数据添加

add() 该方法返回被添加的新记录的主键id值文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

三种方式实现数据添加文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

1. 数组方式数据添加文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$goods = D(“Goods”);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$arr = array(‘goods_name’=>’iphone5s’,’goods_weight’=>’109’);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

//注意:goods_name和goods_weight是数据表中字段名称文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$goods -> add($arr);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

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方式实现数据添加文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

a)         ActiveRecord  活跃记录文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

b)        AR规定了程序与数据库之间的关系文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

c)         什么是AR:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

d)        ① 一个数据表对应一个类model文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

e)         ② 一条数据记录对应类的一个对象文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

f)         ③ 每个字段对应该对象的具体属性文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

g)        tp框架的AR是假的文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$goods = D(“Goods”);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$goods -> goods_name = “htc_one”;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$goods -> goods_price = 3000;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

$goods -> add();文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

以上两种方式:数组、AR,最后add都要把新记录的主键id值返回文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

function Add()
{
     //方式实现数据添加(对象方式)
     //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. 收集表单数据入库操作文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

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

注意:一个add控制器实现两个逻辑,一个是打出添加页面,一个是向数据库添加内容文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

通过一个例子来说明:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

1. 在控制器中写一个方法来接收并向数据库添加数据文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

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中新建:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">
<html xmlns="">
<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>

Thinkphp教程:连接数据库配置及Model数据模型层、查询、添加文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

3.运行结果:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

若添加成功:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

Thinkphp教程:连接数据库配置及Model数据模型层、查询、添加     ==>      Thinkphp教程:连接数据库配置及Model数据模型层、查询、添加    ==>Thinkphp教程:连接数据库配置及Model数据模型层、查询、添加文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

若添加不成功:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

Thinkphp教程:连接数据库配置及Model数据模型层、查询、添加      ==>       Thinkphp教程:连接数据库配置及Model数据模型层、查询、添加文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

注意:如果是主键值重复,这种错误会导致error()方法不跳转页面直接抛出错误信息,这是新版本问题,如果想要跳转,找到文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

Thinkphp教程:连接数据库配置及Model数据模型层、查询、添加文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

Thinkphp教程:连接数据库配置及Model数据模型层、查询、添加文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/10516.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/10516.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定