用thinkphp开发的时候经常会用到多表查询、这个时候tp框架对多表查询封装好了方法,如我们可以使用如下的方法。
$Model->table(
'think_blog Blog,
think_category Category,
think_user User')
->field(
'Blog.id,Blog.name,
Blog.title,
Category.title as category_name,
User.name as username')
->order('Blog.id desc')
->where('Blog.category_id=Category.id AND Blog.user_id=User.id')
->select();
其实这种方法比较繁琐,TP有一个类不知道大家有没有关注过ViewModel.class.php 这个文件,也就是这篇文章所说的视图,这个视图类我们只要继承他然后再子类中定义一个属性、配置好这个属性就可以使用了。如下所示:
1、定义一个视图模型类
//视图模型 一定需要继承 ViewModel这个类 不然视图不能被
class CpViewModel extends ViewModel {
//成员属性必须定义 viewFields不能改名。。。。
public $viewFields = array( 'Cp'=>array('id','name','title',"status"),
'Cp_useer'=>array('cp_id','user_id','title'=>'category_name', '_on'=>'Cp.id=Cp_user.cp_id'), );
}
以上就是配置视图 下面我详细说下这个情况、$viewFields成员属性必须唯一、名称不能改,然后说下这个数组里面的内容Cp Cp_user其实是表名、它是将2张表关联起来,那他们是以什么方式关联的呢?这里有个_on 就可以看明白。那么配置好了之后我们就可以使用它了、如何使用??
如: $cpview = D("Cpview");
$data = array("user_id"=>12,"status");
$order = "id desc";
$cpview->where($data)->order($order)->select();
其实上面viewFields的配置视图 就相当一个虚拟的表 。。。。。。。。。。。大家可以试试!有什么问题欢迎大家沟通。。。。