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元的商品的总数目

tp框架-----Model模型层的更多相关文章

  1. TP框架---Model模型层---做模型对象

    TP框架----Model模型层---------------做模型对象 Model模型层是用来做什么的呢???? 主要是用来做操作数据库访问的. 也就说明TP框架自带了一种访问数据库的方式,使用的是 ...

  2. Tp框架之模型层

    数据模型层是专门针对数据库来操作的 我们在home模块用一下数据模型层 先把配置修改好 我们先来打开这个文件 然后再打开think里面的主配置,把那里面关于数据库的部分,复制到home下的配置文件,然 ...

  3. TP框架---thinkphp模型

    1.获取系统常量信息的方法:在控制器DengLuController里面下写入下面的方法,然后调用该方法. public function test() { //echo "这是测试的&qu ...

  4. tp框架---View视图层---模板继承(举例说明)

    当我们做动态页面时,我们会发现一个网站的头部和尾部是相同的,那么我们如何用tp框架来做模板呢 ? 先看一下注意事项: (1)每个区块由<block></block>标签组成 ( ...

  5. model 模型层

    using System; namespace MODEL { [Serializable] /// <summary> /// 作者: liuhaitao /// 描述: 实体层 -- ...

  6. TP框架 基础1

    php框架 一.真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格 ...

  7. TP框架---thinkphp基础知识

    php框架    发瑞 一.真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困 ...

  8. 2016/05/10 thinkphp 3.2.2 ①系统常量信息 ②跨控制器调用 ③连接数据库配置及Model数据模型层 ④数据查询

    [系统常量信息] 获取系统常量信息: 如果加参数true,会分组显示: 显示如下: [跨控制器调用] 一个控制器在执行的时候,可以实例化另外一个控制,并通过对象访问其指定方法. 跨控制器调用可以节省我 ...

  9. TP框架基础(三)

    [系统常量信息] 获取系统常量信息: 如果加参数true,会分组显示: >系统常量信息里经常用到的是user里的路径 > APP_PATH =>string'./shop/' 项目路 ...

随机推荐

  1. iOS 生成随机字符串 从指定字符串随机产生n个长度的新字符串

    随机字符串 - 生成指定长度的字符串 -(NSString *)randomStringWithLength:(NSInteger)len { NSString *letters = @"a ...

  2. 几个常用的linux快捷键和shell知识

    1)   !$    !$是一个特殊的环境变量,它代表了上一个命令的最后一个字符串.如:你可能会这样:     $mkdir mydir     $mv mydir yourdir     $cd y ...

  3. R实现地理位置与经纬度相互转换

    本实例要实现目标通过输入城市名或者地名,然后找出其经度纬度值,以及通过可视化展现其线路流向以及周边地图展示 address_list数据: 山西省太原市小店区亲贤北街77号 贵州省贵阳市云岩区书香门第 ...

  4. mysql5.6 主从复制

    Master 192.168.59.128 Slave 192.168.59.129   默认认为已安装mysql5.6  mysql5.6 rpm安装配置 修改Master my.cnf文件   # ...

  5. Thinkphp5使用阿里大于短信验证

    现在各种平台登录验证很多时候会使用短信验证,快捷安全,有很多平台提供短信验证服务,相比较而言阿里大于价格比较便宜,快捷,所以在在千锋日常的php教学中多以此为例来说明短信验证的使用.下面我们在tp5中 ...

  6. python-冒泡排序与插入排序

    def bubble_sort(L): """ 设计思路:从前往后遍历列表,每次选取列表中两个数进行比较,如果不符合排序的规则,则进行交换 这样一次遍历后,最大(最小)的 ...

  7. javaSE_08Java中static、继承、重写-思维导图

    思维导图看不清楚时: 1)可以将图片另存为图片,保存在本地来查看 : 2)右击在新标签中打开放大查看 (IE不支持,搜狗,360可以):

  8. 源码分析 Large-Margin Softmax Loss for Convolutional Neural Networks

    作者在Caffe中引入了一个新层,一般情况在Caffe中引入一个新层需要修改caffe.proto,添加该层头文件*.hpp,CPU实现*.cpp,GPU实现*.cu,代码结果如下图所示: caffe ...

  9. Node.js爬虫-爬取慕课网课程信息

    第一次学习Node.js爬虫,所以这时一个简单的爬虫,Node.js的好处就是可以并发的执行 这个爬虫主要就是获取慕课网的课程信息,并把获得的信息存储到一个文件中,其中要用到cheerio库,它可以让 ...

  10. java加密算法入门(一)-算法概念及单向加密

    说起加密,我的第一印象就是电视剧各种密码本破解解密的场景,这两天在看加密相关的东西,做下笔记以便以后查看,也提供给大家个参考. 本文是java加密的第一篇,主要讲述下消息编码Base64以及简单的消息 ...