视图模型更加类似一张表虚拟的表,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。对其中所引用的基础表来说,视图的作用类似于筛选,这是ThinkPHP手册上的说法。其实说白了,视图模型就是mysql多表查询而已,视图模型不支持多表更新,删除。
创建视图模型文件 将该文件保存为 Lib/Model/ArticleViewModel.class.php
<?php
class ArticleViewModel extends ViewModel{
public $viewFields = array(
'article'=>array('id','title','rem','pic','_type'=>'LEFT'),
'cate'=>array('name','_on'=>'article.cateid=cate.id'),
);
}
?>
需要注意的是:
1.'_type'=>'LEFT'
,这里的_type定义对下一个表有效,因此要注意视图模型的定义顺序。
2.'_on'
执行关联操作:主表.所关联的ID=副表(使用的是别名).主键ID,当他们相等的时候,也就实现了主表某个字段与副表的某条数据进行关联了,最后惊醒Select操作就是把关联的内容展现出来了.
在对应的操作中使用视图模型
<?php
namespace Admin\Controller;
use Think\Controller;
class ArticleController extends Controller {
public function lst(){
**$article = D('ArticleView'); // 实例化article对象**
$count = $article->count();// 查询满足要求的总记录数
$Page = new \Think\Page($count,2);// 实例化分页类 传入总记录数和每页显示的记录数(2)
$show = $Page->show();// 分页显示输出
// 进行分页数据查询 注意limit方法的参数要使用Page类的属性
$list = $article->order('id desc')->limit($Page->firstRow.','.$Page->listRows)->select();
$this->assign('list',$list);// 赋值数据集
$this->assign('page',$show);// 赋值分页输出
$this->display();
}
}