thinkphp视图模型详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39967349/article/details/77753457

视图模型更加类似一张表虚拟的表,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。对其中所引用的基础表来说,视图的作用类似于筛选,这是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();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_39967349/article/details/77753457