• TinkPHP框架学习-03模型类


                      1-----数据访问

                      2-----数据查询

                      3-----数据添加

                      4-----数据修改

                      5-----数据删除

    创建一张nation表并写入三条测试数据

    create table nation(
        `code` int(15) not null auto_increment,
        `name` varchar(50) not null,
        primary key (`code`)
    );
    insert into `nation` values
    (1,'人族'),
    (2,'神族'),
    (3,'魔族'),
    (4,'人族');

    一 数据访问(MVC中的M)

       --模型应当建在Model文件下

       --例如对nation表进行操作

          --在Model文件夹下创建NationModel.class.php  创建那个表则用哪个表命名模型,创建类NationModel与文件名一致继承自Model

          --修改数据库链接配置,从tp/ThinkPHP/Conf/convention.php把数据库设置复制至tp/Application/Home/Conf/config.php

                修改书库设置,在各自的模块中修改  'DB_FIELDS_CACHE' => false // 启用字段缓存在开发时改为false 

       ①--第一种:new方式

    <?php
    namespace HomeController;
    use ThinkController;
    class TestController extends Controller {
            public function test(){
            $conn = new HomeModelNationModel();
            var_dump($conn);//输出并查看
    }
    //子类对象NationModel
    }

       ②--第二种:D()方法

    <?php
    namespace HomeController;
    use ThinkController;
    public function test(){
        $conn = D("nation");//直接在方法内写表名
        var_dump($conn);
    }
    //子类对象NationModel
    }

       ③--第三种方式:M()方法

    <?php
    namespace HomeController;
    use ThinkController;
    public function test(){
        $conn = M("nation");//直接在方法内写表名
        var_dump($conn);
    }
    //父类对象Model
    }

       三种方法的区别

          --第一种new方法必须写Model文件

          --第二种方法,如果Model存在则创建子类对象,如果不存在则创建父类对象

          --第三种方法创建父类对象

          --推荐使用第二三种方式

              博客出自"万年",地址:博客出自"万年",地址:http://www.cnblogs.com/wannian/p/8999946.html

    二 数据的查询( 写在test()方法内 )

       --TP框架自带的方法( 以访问nation表为例.$conn为表的对象 );

          |--返回数据的

          --$conn->select();  查询,并返回一个二维数组,

                    --如果没有值,则查询所有,如果写入主键的值则返回相应的查询结果,多个值时用逗号隔开

          --$conn->find( '主键值' )  查询一条数组,返回一个数组

          --$conn->count();  查询并返回数据条数,

          --$conn->max( '字段名' ); 查询并返回字段中最大的数据值 

          --$conn->min( '字段名' ); 查询并返回字段中最小的数据值

          --$conn->avg( '字段名' );  返回该字段数据的平均值,小数点后四位数

          --$conn->sum( '字段名' );  返回该字段数据的和

     |--其他:连贯操作

    --field(" "); 要被查询的列,值为字段名,或count()方法等  例如: $conn->field(' code ')->select(); 查询code列的数据

    --where(" "),根据条件查询,语法与sql语句一样,  例如: $conn->where(" code='1' or code='2' ")->select();根据条件查询

    --table(" ");临时切换表,只在此行切换  例如: $conn->table(' user ')->select(); 切换到`user`表并查询

    --alias(" "); 为表设置别名  例如: $conn->alias(" t1 ")->select();

    --order(" "); 排序   例如: $conn->order('code desc')->select();  根据code列降序排序

    --limit(" ");限制查询条数  例如: $conn->limit("1,2")->select(); 跳过1条数据,取2条数据;

    --page(" 页,条 ");分页查询  例如: $conn->page("2,2")->select(); 取第2页的数据,每页显示2条

    --group(" "); 分组查询  例如:$conn->group("name")->field("name,count(*)")->select(); 根据name字段分组查询name以及统计数量

    --having(" ");配合分组查询筛选条件  例如: $conn->group("name")->having("count(name)>1")->select();  根据name分组,并查询条数大于1条的数据

    --distinct(" "); 去重  例如: $conn->field("name")->distinct("name")->select();   查询name列,并对其去重

    --lock(true); 添加锁  例如:$conn->lock(true)->select();  在执行这条语句的时候,其他人无法操作,(在访问数据非常集中大量时时可避免错误操作)

    --join();连表查询  进行连表查询时建议使用sql语句,个人认为比该方法好;

     |--sql语句查询

          $conn->query(" ");  在query方法中写sql语句,连表查询时建议使用

     

    三 数据的添加

           ①利用数组与add()方法

                

    public function other(){
    $conn = D('nation);
    
      $arr = array('code'=>'5', 'name'=>'精灵族'); //定义一个关联数组,索引对应字段名,值对应数据的值
      $conn->add($arr);  //add();方法添加值;
    
    }

        

           ②利用$conn对象与add()方法(因为$conn是一个对象,且有code与name两个属性,为其赋值)

    public function other(){
    $conn = D('nation);
    
      $conn->code='6';
      $conn->name='兽人族';
      $conn->add();
    
    }

          

          ③自动收集表单

            --前台代码

                --提交到自身方法的路径

                --name的值是数据库表的字段名

    <form action="__SELF__" method="post">
        <div><input type="text" name="code"></div>
        <div><input type="text" name="name"></div>
        <div><input type="submit" value="登录"></div>
    </form>

             --模型的代码

                --判断是否提交

                --create()方法自动收集表单数据

                --add()添加

    public function other(){
        $conn = D("nation");
        if(empty($_POST)){
                $this->show();
        }else{
                //执行添加操作
                $conn->create();//自动收集表单
                $conn->add();
        }
    }

    四 数据的修改

        ①利用数组与save()方法

    public function other(){
    $conn = D('nation);
      $arr = array('code'=>'7', 'name'=>'妖精族');
      $conn->save($arr);  //save()修改;
    }

         ②利用$conn对象与add()方法

    public function other(){
    $conn = D('nation);
    
      $conn->code='6';
      $conn->name='天翼族';
      $conn->save();
    
    }

    ③ 自动收集表单

            --前台代码

                --提交到自身方法的路径

                --name的值是数据库表的字段名

    <form action="__SELF__" method="post">
        <div><input type="text" name="code"></div>
        <div><input type="text" name="name"></div>
        <div><input type="submit" value="登录"></div>
    </form>

            --模型的代码

    public function other(){
        $conn = D("nation");
        if(empty($_POST)){
                $this->show();
        }else{
                //执行添加操作
                $conn->create();//自动收集表单
                $conn->save();
        }
    }

     五 数据删除

        |--delete()方法   值为主键对应的值;

        |--execute()方法,  值为sql语句,进行增删改

     

  • 相关阅读:
    动词 + to do、动词 + doing
    图像直线检测——霍夫线变换
    x=min(x, y)
    x=min(x, y)
    算法 Tricks(三)—— 数组(序列)任意区间最小(大)值
    算法 Tricks(三)—— 数组(序列)任意区间最小(大)值
    分治法求解切割篱笆
    分治法求解切割篱笆
    GMM的EM算法实现
    秒杀多线程第二篇 多线程第一次亲热接触 CreateThread与_beginthreadex本质差别
  • 原文地址:https://www.cnblogs.com/wannian/p/8999946.html
Copyright © 2020-2023  润新知