Code前端首页关于Code前端联系我们

Thinkphp教程:连接数据库配置和模型数据模型层,查询,添加

terry 2年前 (2023-09-25) 阅读数 50 #后端开发

1.连接数据库配置和模型数据模型层

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

JiaoWu\Home\conf\config.php:

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

2.创建模型模型

a)模型本身就是一个类文件

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

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

创建主文件夹 \Model 中的新模型文件:InfoModel.class.php

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

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

3。实例化 Model的三种使用方式:

  1. $goods = new namespace GoodsModel();
  2. $goods = D('model flag');

a) $goods = D(" Goods ") ;

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

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

  1. $obj = M();

a) 父类Model的实例

b) 可以直接调用父类Model中的属性来获取数据库相关操作

c) 自定义模型是一个空壳,不需要创建自定义的模型要实例化的模型

d ) $obj = M('数据表标志');实例化Model对象,实际使用具体数据表

$obj = D(flag);

$obj = D();

$obj = M(flag);

$obj = M ();

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

1。一是新操作的简化方法;

2。后者用于实例化父类Model

3。两者都定义在函数库文件ThinkPHP/Common/

注:如果不存在对应的模型模型文件类,也可以直接实例化模型对象来使用。

D()和M()方法都可以实例化和管理数据表,而无需特定的模型模型类文件。

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);
    }

2.数据查询

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

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

$obj = D();创建对象

常用查询方法:

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

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

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

$obj -> 其中(参数);参数为普通SQL语句后的条件信息 where

例如:("goods_price >100 andgoods_name like '三%'")

$obj -> group(field);按字段分组搜索

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

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

$obj -> limit([offset,]商品数量)限制搜索次数

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

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

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

$obj ->find ( ): 如果我们的搜索结果只包含一条信息,为了方便我们希望返回一个一维数组。这种情况我们可以使用find()方法

相关聚合函数:count() sum() av​​g() 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表格进行练习:

如何在页面上显示所要求的表格内容:

1。在控制器中编写一个方法并实例化模型,查询信息表的内容然后将其注册到前端

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

2。在 View\Main 中创建一个新视图:

3。运行结果:

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

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)                                                                                                                                        ‐‐‐​​​​​​​​​​​①一张数据表对应一个类模型

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

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

g)tp框架的AR是假的

$goods = D(“Goods”);

$goods ->goods_name = “htc_one”;

$goods ->goods_price = 3000;

$goods -> add();

以上两个方法:array、AR、最后add返回新记录的主键id值

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。数据库操作中收集表单数据

  1. 创建表单
  2. 通过$_POST收集信息
  3. 通过create()方法实现数据收集,自动过滤非法字段。注:添加控制器实现两个逻辑:一是打印添加页面,二是向数据库添加内容

    举例说明:

    1。在控制器中编写一个方法来接收数据并将其添加到数据库

    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 中创建一个新视图:

    <!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数据模型层、查询、添加

    3。运行结果:

    如果添加成功:

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

    如果添加不成功: = = > Thinkphp教程:连接数据库配置及Model数据模型层、查询、添加

    注意:如果这些是主要的重复键值。这个错误会导致error()方法立即产生错误,而不会跳转到页面。这是新版本的问题。如果你想跳,搜索

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

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

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门