zoukankan      html  css  js  c++  java
  • tp框架-----Model模型层

    1、Model模型层是用来做什么的呢?

    主要是用来做操作数据库访问的。也就说明TP框架自带了一种访问数据库的方式,使用的是Model模型。

    2、Model模型怎样使用呢?

    要使用Model模型层访问数据库的话,需要做配置,因为必须把数据库的一些参数配置好之后,才能连接,所以找到Config.php。

       如何修改配置呢?

    1)打开下图路径中的Convention.php文件

    2)复制convention.php中的下图内容到Home/Conf/config.php中

    3)修改配置,将自己的数据库名、密码等 写上

    注意:

     'DB_FIELDS_CACHE'  =>  false,        默认是true,建议关闭,所以选择false
    <?php
    return array(	
    //'配置项'=>'配置值'
    'SHOW_PAGE_TRACE'=>true,
     /* 数据库设置 */
        'DB_TYPE'               =>  'mysql',        // 数据库类型
        'DB_HOST'               =>  'localhost',   // 服务器地址
        'DB_NAME'               =>  'book',       // 数据库名
        'DB_USER'               =>  'root',       // 用户名
        'DB_PWD'                =>  '',          // 密码
        'DB_PORT'               =>  '',        // 端口 默认3306
        'DB_PREFIX'             =>  '',       // 数据库表前缀
        'DB_PARAMS'          	=>  array(),  // 数据库连接参数    
        'DB_DEBUG'  			=>  TRUE,     // 数据库调试模式 开启后可以记录SQL日志
        'DB_FIELDS_CACHE'       =>  false,        // 启用字段缓存;默认开启,建议关闭
        'DB_CHARSET'            =>  'utf8',      // 数据库编码默认采用utf8
    );
    

      

     如何连接数据库呢?(创建模型对象呢?)

    (1)  制作model模型

      a) model本身就是一个类文件

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

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

    (2)实例化Model的三种方式:

    第一种方式:

    <?php
    namespace CeshiController;
    use ThinkController;
    class MainController extends  Controller
    {	
       	public function index(){
       		
       		$n = D("book");
       		var_dump($n);
       	}
    }
    

    第二种方式:

    <?php
    namespace CeshiController;
    use ThinkController;
    class MainController extends  Controller
    {	
       	public function index(){
       		
    // 		$n = D("book");
       		$n = M("book");
       		var_dump($n);
       	}
    }
    

      

      两种方式结果如下图:

    用D()和M()到底有什么区别呢?

    首先,在Ceshi/Model/BookModel.class.php:(对应的Model类文件)

    <?php
    namespace Homemodel;
    use ThinkModel;
    class BookModel extends Model
    {
    	
    }
    

    现在再运行D()和M():

    D():

    M():

    这时就会发现用红色圆圈 标记的地方有所不同,M()造的是父类对象,D()造的是普通的对象,他们的区别只有在有对应的Model类文件下才会有。

    D()M()方法都可以实例化操作一个没有具体model模型类文件的数据表。

    第三种方式:(有对应的Model类文件)

    $db = new HomeThirdDB();------------   $db =  new  + 命名空间 + DB();  

     

    tp框架如何获取数据?

    //获取数据
    	$arr =  $n->select();  //读取所有数据;二维数组
    	$arr = $n->select("20,1");//可以给参数,必须是主键值,可以给多个
    	$arr =  $n->find("20");// 读一条数据,是一维数组
    	$arr =  $n->count();  //返回该表的数据总数
    
    
    //聚合函数
    	$arr =  $n->max("bkprice"); 
    	$arr =  $n->sum("bkprice"); 
    	$arr =  $n->min("bkprice"); 
    	$arr =  $n->avg("bkprice"); 
    

     tp框架的连贯操作

    //连贯操作
    //where返回的是对象,需要再掉一次,where相当于加查询条件,可以and  or加多个条件
    $arr = $n->where("bkprice>30")->select();
    //动态切换,切换数据表
     $arr = $n->table("users")->select();
    //field用来确定查找的列数
    $arr = $n->field("bkname,bkprice")->select();
    //用于排序
    $arr = $n->order("bkprice desc")->select();
    //limit做分页第一个参数表示跳过多少条
    $arr = $n->limit(3,3)->select();
    //page第一个参数代表页数
    $arr = $n->page(4,1)->select();
    //连接查询未完
    $arr = $n->field("orders.oid,orders.bkid as obkid")->join("book on orders.bkid=book.bkid")->select();
    //tp可以调用原声的sql语句
    $arr = $n->query("select * from book");
    $arr = $n->execute("insert into book values('','12','12','','','','','','')");
    

      

    总结---数据查询

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

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

    $obj = D();  创建对象

    $obj -> select();  查询数据

    select  字段,字段  from  表名  where 条件  group 字段 having  条件   order 排序  limit 限制条数;

    SELECT%DISTINCT%%FIELD%FROM %TABLE%%JOIN%%WHERE%%GROUP%%HAVING%%ORDER%%LIMIT% %UNION%%COMMENT%

    $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([偏移量,]条数)  限制查询的条数

    sql语句里边具体的条件设置在tp框架model模型里边体现为具体的方法操作

    以上方法理论上是父类Model的对应方法

    父类model具体存在方法:   field()  where()   limit()

    还有一些方法在__call()自动调用函数里边: table()  group()  order()  having()

    __call()魔术方法里边会判断当前的执行方法是否是一个method属性的元素信息,如果存在就会执行执行

    以上多个方法是同时使用多个进行条件显示(并且没有顺序要求)

    $obj -> limit(5)->field(‘id,name’)->order(‘price asc’) -> table(‘sw_goods’)->select();

    以上许多方法执行没有顺序要求,许多方法执行后都是把具体的参数赋予到model属性options里边,最后根据options拼装sql语句。

    $info = $goods -> where()->field(字段)->select();

    select()方法

    1. 返回一个二维数组信息

    2. 返回全部数据表信息

    3. 给该方法传递参数

    a) select(30)  查询主键值等于30的记录信息

    b) select(“10,12,14”)  查询主键值在101214范围的记录信息

    1. find()如果我们查询的结果只有一个信息,使用select()会返回一个二维数组

    为了使用方便我们会希望返回一个一维数组,这时候可使用find()方法

    1. having()方法设置查询条件,where()设置查询条件

    6. 相关聚合函数 count()  sum()   avg()   max()   min()

    以上聚合函数是最后被调用的方法

    以上方法可以结合具体条件方法使用

    例如:$goods -> where(‘goods_price >1000’)->count(); 大于1000元的商品的总数目

  • 相关阅读:
    fork操作
    PHP操作Memcached
    对nginx进行平滑升级
    Codeforces Round #457 (Div. 2) B
    codeforces Educational Codeforces Round 39 (Rated for Div. 2) D
    矩阵相乘
    求组合数板子
    斯特林(Stirling)公式 求大数阶乘的位数
    codeforces Gym 101572 I 有向图最小环路径
    Floyd算法——保存路径——输出路径 HDU1385
  • 原文地址:https://www.cnblogs.com/chenguanai/p/7140465.html
Copyright © 2011-2022 走看看