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 Ceshi\Controller;
use Think\Controller;
class MainController extends  Controller
{   public function index(){$n = D("book");var_dump($n);}
}

第二种方式:

<?php
namespace Ceshi\Controller;
use Think\Controller;
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 Home\model;
use Think\Model;
class BookModel extends Model
{}

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

D():

M():

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

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

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

$db = new \Home\Third\DB();------------   $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”)  查询主键值在10、12、14范围的记录信息

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

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

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

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

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

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

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

转载于:https://www.cnblogs.com/chenguanai/p/7140465.html

tp框架-----Model模型层相关推荐

  1. php tp框架调用m层,TP学习笔记一(tp的目录结构 , tp的输出方式)

    一.ThinkPHP的介绍 //了解 MVC M - Model 模型 工作:负责数据的操作 V - View 视图(模板) 工作:负责前台页面显示 C - Controller 控制器(模块) 工作 ...

  2. Django框架的模型层之多表操作

    目录 一 创建模型 二 表记录的增删改 一对多 多对多 三.基于对象的跨表查询 一对一查询(Author 与 AuthorDetail) 一对多查询(publish与book) 多对多查询 (Auth ...

  3. Django框架——模型层单表操作、模型层多表操作、模型层常用和非常用字段和参数、模型层进阶

    文章目录 1 模型层-单表操作 一 ORM简介 二 单表操作 2.1 创建表 1 创建模型 2 更多字段 3 更多参数 4 settings配置 5 增加,删除字段 2.2 添加表纪录 2.3 查询表 ...

  4. tp框架之Model类与命名空间

    1.获取系统常量信息 public function shuchu(){var_dump(get_defined_constants()); }2.跨控制器或跨模块调用 function diaoyo ...

  5. 【深度学习】深入浅出神经网络框架的模型元件(池化、正则化和反卷积层)

    [深度学习]深入浅出神经网络框架的模型元件(池化.正则化和反卷积层) 文章目录 1 池化层 1.1 MaxPooling2D 1.2 MaxPooling1D: 1.3 AveragePooling2 ...

  6. 【深度学习】深入浅出神经网络框架的模型元件(常用层和卷积层)

    [深度学习]深入浅出神经网络框架的模型元件(常用层和卷积层) 文章目录 1 常用层1.1 Dense1.2 Activation层1.3 Dropout1.4 Flatten 2 卷积层2.1 Cov ...

  7. MVC中Model BLL层Model模型互转

    MVC中Model BLL层Model模型互转 一. 模型通常可以做2种:充血模型和失血模型,一般做法是模型就是模型,不具备方法来操作,只具有属性,这种叫做失血模型(可能不准确):具备对模型一定的简单 ...

  8. django框架——模型层(下)

    系列文章目录 第一章 django安装与介绍 第二章 django基础使用 第三章 路由层 第四章 虚拟环境.django版本区别.视图层 第五章 模板层 第六章 模型层(上) 第七章 模型层(下) ...

  9. thinkphp模型层Model、Logic、Service讲解

    thinkphp模型层Model.Logic.Service讲解 时间:2014-08-24 15:54:56   编辑:一切随缘   文章来源:php教程网 已阅读:771 次 js特效源码,就从这 ...

  10. thinkphp通过模型查询mysql_6月16 ThinkPHP连接数据库及Model数据模型层--------查询及数据添加...

    连接数据库配置及Model数据模型层 convertion.php config.php 1.在config.php做数据库连接配置 2.修改配置 /*数据库设置*/ 'DB_TYPE' => ...

最新文章

  1. sdut 2135 数据结构实验之队列一:排队买饭
  2. 罗永浩与银联合作直播,但因过程太流畅被网友调侃是录播
  3. 力扣26--删除有序数组中的重复项
  4. linux编译安装mysql的意思,linux编译模式安装mysql 步骤说明
  5. wxpython控件字体_wxPython获取系统字体代码
  6. mysql类目树关系的保存和全排列查询
  7. 非线性光纤光学——光孤子
  8. jsp综合开发实例——夏日九宫格日记网
  9. 栈“后进先出”和队列中“先进先出”的含义
  10. android SwipeMenuLayout实现控件侧滑删除
  11. sun.misc.BASE64Encoder是内部专用 API, 可能会在未来发行版中删除
  12. java读取局域网共享文件夹中文件并保存到本地文件夹
  13. nokia手机的含义
  14. SpringBoot集成微信支付V3
  15. Mac 如何在终端玩游戏
  16. LeetCode 576 出界的路经数
  17. 笔记本 windows10使用耳机看视频 刚开始会有几秒的无声
  18. 追踪放“马”贼——从木马中分析放马者手记
  19. Linux下查看icc安装目录,linux icc 安装
  20. 类型列表Python 学习手册 第二部分 类型与运算 第4章 介绍Python对象类型

热门文章

  1. lsblk命令 – 查看系统的磁盘
  2. MongoDB 数据集合导出 与 导入
  3. 小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介
  4. 阶段3 1.Mybatis_02.Mybatis入门案例_2.mybatis入门案例中的设计模式分析
  5. 电子书下载:MySQL Stored Procedure Programming
  6. IDEA(2018)导入项目报错解决方案
  7. Django 学习笔记(五) --- Ajax 传输数据
  8. Linux下Nginx安装
  9. 关于吐槽网播放映兔源视频无法播放的问题 及解决方案
  10. Hibernate(六):映射一对多关联关系、双向一对多映射