THINKPHP里视图模型如何实现COUNT查询?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了THINKPHP里视图模型如何实现COUNT查询?相关的知识,希望对你有一定的参考价值。

有博文表`blog`和栏目表`cate`如何实现SELECT cate.`id`,cate.`name`,(SELECT COUNT(*) FROM `blog` WHERE cate.id=blog.cid) AS nums FROM cate;目的是实现查出每个栏目和其栏目下的博文篇数,如下效果。

想知道用视图模型ViewModel怎么写?我试了好几次都没用

参考技术A 'cate'=>array('id','name'),
'Category'=>array('count(*)'=>'nums', '_on'=>'blog.cid=cate.id'),追问

我就是这么写的,最后不是想要的那种效果

追答

显示的是什么效果?

追问

你写的category错了吧?我只有blog和cate表

这是我写的:

'cate' => array('id', 'name'),

blog' => array('count(*)' => 'nums','_on'=>'cate.id=blog.cid')


就返回我1条记录

参考技术B 你的ViewModel写对的啊,关键你的查询语句怎么写的
会不会是用了find()方法而只返回一条数据?追问

用的select(),我用SHOW_PAGE_TRACE看了发送的SQL语句是:SELECT cate.id AS id,cate.name AS name,count(*) AS nums FROM cate cate JOIN blog blog ON cate.id=blog.cid
感觉用视图模型行不通了,打算写纯生的 或 用连贯操作和SQL解析结合了

参考技术C $model->where('')->count();

thinkphp 关联模型和视图模型的区别?

我一般多表联合查数据的话都是直接用join的,但是最近看手册和别人的项目,看到了“关联模型”,貌似都是同样能查数据的啊,而且比用join还费事点
呢,所以问题出来了,想问一下,什么情况下要用关联模型呢?是不是有视图模型解决不了的问题而关联模型可以呢?它们的区别又在哪里呢?求解
另外:
下面是我用join进行的多表联合查询,如果改成tp中的视图查询,model中的$viewFields又该怎么定义呢,控制器中该怎么调用呢?我看手册看的都晕了,好迷糊哦,求解,如果能把底下的改成tp的定义用法,再结合手册,我想我就明白了tp的视图模型了 ,谢谢

$A_con = $Article->field('fcym_article.*,fcym_article.name fe_name,fcym_author.name fr_name,fcym_article_class.name fs_name,fcym_article_type.name fpe_name') ->join('inner join fcym_author on fcym_article.auid = fcym_author.id') ->join('inner join fcym_article_class on fcym_article.classid = fcym_article_class.id') ->join('inner join fcym_article_type on fcym_article.typeid = fcym_article_type.id') ->order('id')

->limit($Page->firstRow,$Page->listRows)

->select();

先说下,关联模型。

 

如你所说,关联模型和jion类似。

实际上,thinkphp的关联模型,就是简化你的jion操作。所以,本质上,关联模型,就是处理表连接关系的。归根结底的,就是让你在用模型操作的时候,简化SQL查询的join操作。(是简化操作,而不是改变SQL语句。)

 

 

视图模型。

先举个例子。一个用户表,一个文章表。一个用户对应多篇文章。

 

然后,你现在会经常出现如下需求:取得某人的文章记录,但是呢,只要求显示,用户名,文章名,文章ID,文章日期(其他的,比如,什么用户邮箱啊,用户密码啊,文章类型啊,文章修改日期啊,文章标签啊,你都不需要)

 

这个时候,你就可以定义一个试图模型,然后在 $viewFields 里面,就可以把你经常使用需要调用的那个几个字段,按照thinkphp的规定,定义进去。

 

这样,经过定义之后,你每次操作的时候,就像是操作“单表”一样的,是不是就很方便了呢。

 

 

其实,这个视图的概念,是一般比较完善点的关系型数据库都支持的,比如mysql,MSSQL,ORACLE等等。可以参考下相关数据库的知识。

 

至于你的那个东西定义的可参考方式如下。

class ArticleViewModel extends ViewModel 
   public $viewFields = array(
     'Article'=>array('name','title'....其他字段),
     'Author'=>array('title'=>'category_name', '_on'=>'article.auid=author.id'),
     'Article_class'=>array(字段定义如上,具体规则,下面有介绍, '_on'=>上面已经给你写了一个,这里其实就是写,article,和article_class 的主外键,对应关系。即JOIN ....ON..语句,ON部分的多内容),
    'article_type'=>array('field_realename'=>'field_alias'。这里就相当于查询语句SELECT 字段  字段的别名。这样的对应关系。) 
   );
   

 

 

OK.受人之鱼不如授人之渔。上面没有给你详细答案,而是根据你的条件,给了你一个示例,希望你能研究透。

参考技术A 我来通俗的给你解释一下吧:

1、视图模型
比如你是一个文章管理的网站,你有2个表 一个是文章内容的表(表名:tp_article),一个是栏目的表(tp_category),你要查询栏目id=5的里面所有文章。这个时候就可以用到视图模型了,文章内容表里面你可以有一个字段 cid (ps:我只是这么举例)查询的条件就是tp_article.id = tp_category.cid。当然写法不是这么写,详细你用到的时候可以继续追问我,只是给你这么举例说明这个视图模型的用法,这样就能查出栏目id为5的文章内容页面表里面的所有数据了。

2、关联模型
按照字面上的解释,我想你也能大致了解这个模型的用途,关联模型我先给你说说有3种关联方式,才好继续下一步解说,一对一、 一对多、 多对多
例子:比如在你设计的网站 用到了会员模块,一个会员肯定就会设计多张表 举例:比如有发布的主题表,回复表,这样相对于主题表和会员对应的是 多对一这个概念,这里就可以用到关联模型的一对多,你就可以对会员管理,删除这个会员下面的所有主题,

最后,很多人都会对视图模型和关联模型什么时候该用有不懂的地方,当然我也是小白,我也是自学的,我也会遇到,我就会想,所以你能用什么模型做到的 你就用什么模型去做吧,我要是说错了,欢迎tp大神批评,我也是小白,要是没说错,就给我采纳吧,升级不容易啊,唉!!!!追问

额……能说说区别不?有什么另一方做不到的呢?

追答

视图只可以查吧,关联可以很多操作,但是看了一下后盾网的视频 多对多的时候,就有问题了!其实你不必纠结与这些!

参考技术B 我来通俗的给你解释一下吧:

1、视图模型
比如你是一个文章管理的网站,你有2个表 一个是文章内容的表(表名:tp_article),一个是栏目的表(tp_category),你要查询栏目id=5的里面所有文章。这个时候就可以用到视图模型了,文章内容表里面你可以有一个字段 cid (ps:我只是这么举例)查询的条件就是tp_article.id = tp_category.cid。当然写法不是这么写,详细你用到的时候可以继续追问我,只是给你这么举例说明这个视图模型的用法,这样就能查出栏目id为5的文章内容页面表里面的所有数据了。

2、关联模型
按照字面上的解释,我想你也能大致了解这个模型的用途,关联模型我先给你说说有3种关联方式,才好继续下一步解说,一对一、 一对多、 多对多
例子:比如在你设计的网站 用到了会员模块,一个会员肯定就会设计多张表 举例:比如有发布的主题表,回复表,这样相对于主题表和会员对应的是 多对一这个概念,这里就可以用到关联模型的一对多,你就可以对会员管理,删除这个会员下面的所有主题,

最后,很多人都会对视图模型和关联模型什么时候该用有不懂的地方,当然我也是小白,我也是自学的,我也会遇到,我就会想,所以你能用什么模型做到的 你就用什么模型去做吧,我要是说错了,欢迎tp大神批评,我也是小白,要是没说错,就给我采纳吧,升级不容易啊,唉!!!!

以上是关于THINKPHP里视图模型如何实现COUNT查询?的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp 关联模型和视图模型的区别?

thinkphp 视图模型 两个字段映射同一个表

thinkphp如何查询数据库某一表中有多少条数据?

thinkphp模型查询加必要条件

thinkphp 5 及一下或php项目里实现模糊查询

thinkphp中怎么用group和count查询三篇文章各自的评论数