ThinkPHP 3.2.3 试图模型的手册地址是:http://www.kancloud.cn/manual/thinkphp/1781

实例

需求:在博客列表页读取博客的(id、标题、摘要、发布时间、点击次数)等信息以及该篇博文所属分类的(分类名)等信息

数据表:

crm_blog

+---------+----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------------------+------+-----+---------+----------------+
| id | int() unsigned | NO | PRI | NULL | auto_increment |
| title | varchar() | NO | | | |
| summary | varchar() | NO | | | |
| content | text | NO | | NULL | |
| time | int() unsigned | NO | | | |
| click | smallint() unsigned | NO | | | |
| cid | int() unsigned | NO | MUL | NULL | |
| del | tinyint() unsigned | NO | | | |
+---------+----------------------+------+-----+---------+----------------+

crm_cate

+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int() unsigned | NO | PRI | NULL | auto_increment |
| name | char() | NO | | | |
| pid | int() unsigned | NO | MUL | | |
| sort | smallint() | NO | | | |
+-------+------------------+------+-----+---------+----------------+

crm_blog 和 crm_cate 是多对一的关系(BELONGS_TO)

在 Home 模块的 Model(./Application/Home/Model)下创建 BlogViewModel.class.php

<?php
namespace Home\Model;
use Think\Model\ViewModel;
/*
* 视图模型
*/ class BlogViewModel extends ViewModel{ protected $viewFields = array(
'blog'=>array(
'id','title','summary','click','time',
'_type'=>'LEFT' //关联方式,默认是 INNER
),
'cate'=>array(
'name'=>'cate_name',
'_on'=>'blog.cid = cate.id' //关联条件
)
); public function get_all($where,$limit) { return $this->where($where)->limit($limit)->select();
}
}

控制器 ./Application/Home/Controller/ListController.class.php

<?php
namespace Home\Controller;
use Think\Controller;
use Admin\Common\Category;
use Think\Page; class ListController extends Controller{
//列表页
public function index() { $id = (int)$_GET['id'];
$cate = M('cate')->order('sort')->select(); //分类名称
$this->cate_name = M('cate')->where(array('id'=>$id))->getField('name'); //通过父id递归查出子id
$cids = Category::get_children_id($cate, $id);
$cids[] = $id; //分页
$where = array('cid'=>array('IN',$cids));
$count = M('blog')->where($where)->count();
$page = new Page($count,1);
$limit = $page->firstRow.','.$page->listRows;
$this->page = $page->show(); //使用试图模型
$this->blog = D('BlogView')->get_all($where,$limit);
//echo D('BlogView')->getLastSql();//一条联合查询语句 SELECT blog.id AS id,blog.title AS title,blog.summary AS summary,blog.click AS click,blog.time AS time,cate.name AS cate_name FROM crm_blog blog LEFT JOIN crm_cate cate ON blog.cid = cate.id WHERE `cid` IN ('13','12','11',4) $this->display();
}
}

缺陷:在列表页分页完成之后,分页的链接并不是 URL 重写之后的链接,待改进。  

ThinkPHP 3.2.3 视图模型的使用的更多相关文章

  1. thinkphp 3.2 视图模型 实例 视图查询结果 二维数组 合并

    使用视图模型查询的时候 结果是这样的 array(6) { [0] => array(5) { ["picTitle"] => string(7) "标题2& ...

  2. ThinkPHP中视图模型详解.

    很多TP的新手对于模型中的视图模型不甚了解,官方虽然有详细手册,但是对于初学者来说还是比较难以理解! 先简单说一下视图模型所能实现的功能,基本就是主表与副表之间各个字段的关联问题,实现多表关联查询,相 ...

  3. thinkphp 视图模型使用分析

    <?php /** * 视图模型 * */ class ViewBatchModel extends ViewModel{ public $viewFields = array( 'Jinxia ...

  4. ThinkPHP第十六天(redirect、join、视图模型)

    1.redirect /** * Action跳转(URL重定向) 支持指定模块和延时跳转 * access protected * @param string $url 跳转的URL表达式 * @p ...

  5. Thinkphp 视图模型

    1.创建视图模型 2.定义视图模型 class BlogViewModel extends ViewModel { public $viewFields = array( 'Blog'=>arr ...

  6. 当类型为dynamic的视图模型遭遇匿名对象

    当年在ASP.NET MVC 1.0时代我提到,在开发时最好将视图的Model定制为强类型的,这样可以充分利用静态检查功能进行排错.不过有人指出,这么做虽然易于静态检查,但是定义强类型的Model类型 ...

  7. [转]架构蓝图--软件架构 "4+1" 视图模型

    架构蓝图--软件架构 "4+1" 视图模型 本文基于多个并发视图的使用情况来说明描述软件密集型系统架构的模型.使用多重视图允许独立地处理各"风险承担人":最终用 ...

  8. KnockoutJS 3.X API 第二章 数据监控(1)视图模型与监控

    数据监控 KO的三个内置核心功能: 监控(Observable)和依赖性跟踪(dependency tracking) 声明绑定(Declarative bindings) 模板(Templating ...

  9. DDD:谈谈数据模型、领域模型、视图模型和命令模型

    背景 一个类型可以充当多个角色,这个角色可以是显式的(实现了某个接口或基类),也可以是隐式的(承担的具体职责和上下文决定),本文就讨论四个角色:数据模型.领域模型.视图模型和命令模型. 四个角色 数据 ...

随机推荐

  1. json解析不推荐使用eval

    推荐使用JSON.parse() 低版本浏览器(IE6/7)不支持此方法,可以通过网上下载json2.js,引入到文件中,此文件通过判断浏览器是否支持JSON.parse()方法,如果不支持,文件中编 ...

  2. 转载:python发送HTTP请求

    1. [代码]GET 方法 import httplib #----------------------------- conn = httplib.HTTPConnection("www. ...

  3. header元素

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. ural 1251. Cemetery Manager

    1251. Cemetery Manager Time limit: 1.0 secondMemory limit: 64 MB There is a tradition at the USU cha ...

  5. zookeeper清除日志文件工具

    zookeeper运行时间长了以后,日志会成为一个比较大的问题.比如作者压力测试hbase一周以后,zookeeper日志文件达到了10G的规模.由于zookeeper日志文件不能随意删除,因为一个长 ...

  6. HTML5与移动端web学习笔记

    HTML5 提供了很多新的功能,主要有: 新的 HTML 元素,例如 section, nav, header, footer, article 等 用于绘画的 Canvas 元素 用于多媒体播放的 ...

  7. iebugs产生的原因,zoom:1的作用

    zoom:1是针对ie的属性,可以激活hasLayout属性,关于hasLayout haslayout 是Windows Internet Explorer渲染引擎的一个内部组成部分.在Intern ...

  8. URAL 1057. Amount of Degrees(数位DP)

    题目链接 我看错题了...都是泪啊,不存在3*4^2这种情况...系数必须为1... #include <cstdio> #include <cstring> #include ...

  9. PHP 7 测试用例(转)

    性能改善:PHP 7高达两倍快的PHP 5.6 显著减少内存使用 抽象语法树 一致的64位支持 改进的异常层次结构 许多转化为异常致命错误 安全随机数发生器 删除旧的和不支持的SAPIs和扩展 空合并 ...

  10. IIS7.0+部署ARR负载均衡

    安装: 1.  安装IIS(需要附带相关的健康检查,需要原始的那个默认站点) 2.  安装ARR相关的文件 3.  安装好之后,IIS里会出现有Server Farms的节点,直接创建服务器. 站点对 ...