TinkPHP框架学习-02模型类

                  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 Home\Controller;
use Think\Controller;
class TestController extends Controller {
        public function test(){
        $conn = new \Home\Model\NationModel();
        var_dump($conn);//输出并查看
}
//子类对象NationModel
}

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

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

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

<?php
namespace Home\Controller;
use Think\Controller;
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语句,进行增删改

原文地址:https://www.cnblogs.com/wannian/p/8999946.html

时间: 2024-08-03 20:21:21

TinkPHP框架学习-02模型类的相关文章

TinkPhp框架学习

学习TinkPhp(以下简称TP)已经快两个星期了,进度很慢,主要原因在于前后端的内容都不熟练,直接用框架更是不会修改,同时TinkPhp介绍性内容较多,练习安排的时间不够. 在看TP文档时发现,里面有很多错误内容,同时也存在很多歧义内容,希望其能有改善.不过这个模板,还是很适合我们这种WEB初学者,它可以让你有个本质的飞跃. 模块化.视图VIEW 之前做网页,只是单纯的一个文件从头到尾,TP则把我带向了一个面向对象的世界吧!感觉TP的思想就是把内容模块化,采用MVC模式,和Java的封装继承类

Spring框架学习02——Spring IOC 详解

1.Spring IOC的基本概念 IOC(Inverse of Control)反转控制的概念,就是将原本在程序中手动创建对象的控制权,交由Spring框架管理.当某个Java对象(调用者)需要调用另一个Java对象(被调用者)时,在传统编程模式下,调用者通常会采用“new 被调用者”的代码方式来创建对象.这种方式会增加调用者与被调用者之间的耦合性,不利于后期代码的升级与维护.当Spring框架出现后,对象的实例不再由调用者来创建,而是由Spring容器来创建.Spring容器会负责控制程序之

laraver框架学习------工厂模型填充测试数据

在laravel中填充数据有几种方式.一种是Seeder,另一种是工厂模式进行的填充. 工厂模式可以实现大批量的填充数据,数据的量可以自定义.这也为后续的软件测试提供方便. 在laravel框架有database文件下有工厂模式的定义文件,可以在其后面定义自己的工厂模式,注意对自己model对应. $factory->define(App\Models\Course::class,function (Faker\Generator $faker) { $faker=Faker\Factory::

深度学习Keras框架笔记之AutoEncoder类

深度学习Keras框架笔记之AutoEncoder类使用笔记 keras.layers.core.AutoEncoder(encoder, decoder,output_reconstruction=True, weights=None) 这是一个用于构建很常见的自动编码模型.如果参数output_reconstruction=True,那么dim(input)=dim(output):否则dim(output)=dim(hidden). inputshape: 取决于encoder的定义 ou

深度学习Keras框架笔记之TimeDistributedDense类

深度学习Keras框架笔记之TimeDistributedDense类使用方法笔记 例: keras.layers.core.TimeDistributedDense(output_dim,init='glorot_uniform', activation='linear', weights=None W_regularizer=None, b_regularizer=None, activity_regularizer=None, W_constraint=None, b_constraint

OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类

昨天学习了Foundation框架中NSArray类和NSMutableArray类:http://blog.csdn.net/jiangwei0910410003/article/details/41809719,今天来看一下Foundation框架中的NSDirctionary类,NSMutableDirctionary类,这个和Java中的Map类很想,OC中叫字典,Java中叫Map,还有字典是无序的,这个和NSArray不一样,Java中的Map也是无序的,通过hash值去检索元素的.

Direct-X学习笔记--封装一个网格模型类

之前学习了网格模型的导入,绘制,了解了X文件等相关知识,但是,那样绘制比较麻烦,而且绘制一个模型需要好多代码,完全是面向过程的思维,这次,学习一下怎么把网格模型的导入以及绘制等功能封装在一个类中.顺便加深一下对World Transform的理解.感觉自己的3D思维还是没有培养起来,想绘制一个对象,绘制出来和想象中的位置相差甚远. 一.复习一下网格模型相关知识 网格模型就是一个我们在美术工具中制作好的资源,通过一些API接口我们可以将美术童鞋做好的模型很方便的导入程序中.我们只需要了解怎样从文件

(转载)OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类

昨天学习了Foundation框架中NSArray类和NSMutableArray类,今天来看一下Foundation框架中的NSDirctionary类,NSMutableDirctionary类,这个和Java中的Map类很想,OC中叫字典,Java中叫Map,还有字典是无序的,这个和NSArray不一样,Java中的Map也是无序的,通过hash值去检索元素的. 一.NSDirctionary类 1 // 2 // main.m 3 // 19_NSDictionary 4 // 5 //

自定义MVC框架之工具类-模型类

截止目前已经改造了5个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 自定义MVC框架之工具类-文件上传类 自定义MVC框架之工具类-图像处理类 这个模型类支持以下功能: >连贯操作,js叫链式操作,连贯操作的函数可以打乱顺序,最后一个函数必须是执行语句的那个函数,如select, delete, update, add等 如 $db->table( 'user' )->where( 'id=1' )->select() 等