文档章节

ThinkPHP实现二级嵌套评论的查询,利用视图模型

沐风storm
 沐风storm
发布于 2015/05/02 22:32
字数 518
阅读 272
收藏 0

以下为评论表结构

其中id为主键自增字段,uid为评论者id,aid为所评论的文章id,pid为上级评论id,comment为评论内容,ctime为评论时间

要实现二级嵌套评论,pid为0的为一级评论,否则为二级评论,二级评论为一级评论的子评论。

 

<?php
class CommentViewModel extends ViewModel {
 public $viewFields = array( 
  'ArticleComment' => array('id','uid', 'aid', 'pid', 'comment', 'ctime'),
  'User' => array('username', 'password', 'email','_on' => 'User.id=ArticleComment.uid', '_type' => "LEFT"),
  'UserInfo' => array('name', 'sex', 'age', 'mobile', 'site', 'address', 'zip', 'intro', '_on' => 'UserInfo.uid=ArticleComment.uid', '_type' => "LEFT"),
  );
}
?>

 上述代码还未写出文章相应信息的查询(如有需要增加即可)。查询代码如下:

$article = D('CommentView'); //实例化Comment视图模型
$articleComments = $article -> where(array('aid' => $aid, 'pid' => 0)) -> limit(10) -> select(); //将一级评论查询出来 www.111cn.net
foreach($articleComments as $comment) {
 $comments[$comment['id']] = $comment; //将查询出来的一级评论按id赋给comments数组
}
$commentID = array_keys($comments); //取出一级评论的id,为下面查询对应的二级评论做准备
if (!empty($commentID)) {
 foreach($commentID as $id) {
  $sqlArray[] = 'pid=' . $id; //生成查询二级评论所用条件数组
 }
 $sql = implode(' OR ', $sqlArray); //将数组连接,生成对应的SQL条件语句
 $articleComments = $article -> where($sql) -> limit(10) -> select(); //查询对应二级评论
 foreach($articleComments as $comment) {
  $comments[$comment['pid']]['comments'][] = $comment; //按树形排列评论
 }
}
$this -> assign('comments', $comments);

 

原理根据注释很好理解。

1.先查询出pid为0的评论(即为一级评论)

2.将一级评论的评论ID记录下来,生成SQL条件子句

3.使用生成的条件字句进行查询,查询出之前查询出来的一级评论下面的二级评论

4.将查询出来的代码按树形数组格式进行处理,生成comments变量,赋给模板显示

该方法只查询了两次数据库,效率得到了大大的提高。

如果想要做到多级评论,可以再加一个level字段,进行相应的处理,这里不再赘述,读者可以自行尝试。

 

 

本文转载自:http://www.111cn.net/phper/smarty/59583.htm

沐风storm
粉丝 0
博文 10
码字总数 4795
作品 0
武汉
程序员
私信 提问
Thinkphp下实现对数组的分页

今天终于把两周之前的任务完成了,趁着余热记下来分享给大家。 说一下任务,在thinkphp的框架下实现分页。公司的网站基于Thinkphp框架,一直久闻thinkphp的大名,终于有机会实战了。 thinkp...

zhang_go
2014/04/09
614
1
thinkphp开发的框架的简单介绍

  说起来现在的互联网时代中用到thinkphp的地方也是很多的,这也是一项技术活,开发框架也是比较有难度的,下面就给大家简单地介绍一下。   ThinkPHP是一个免费开源的,快速、简单的面向...

孙智绘
2012/06/28
56
0
ThinkPHP3.0新特性: 快捷查询

新版增加了快捷查询方式,可以进一步简化查询条件的写法,例如: 一、实现不同字段相同的查询条件 $User = M("User"); // 实例化User对象 $map['name|title'] = 'thinkphp'; // 把查询条件传......

岭南六少
2012/02/27
437
0
PHP学习路线图 最全PHP自学指南

对于广大零基础的PHP自学者,往往不知道如何系统的学习PHP,导致平白浪费了很多时间。本文将为大家带来最详细的php学习路线图,同时还会附上相应的权威教程,让广大PHP自学者少走许多弯路。 ...

W3Cschool小编
2018/04/24
0
0
ThinkPHP 2.0 版本正式发布

在经过5个月的重构和完善之后,ThinkPHP终 于发布了新的里程碑版本2.0,作为新版网站上线和祖国60周年华诞的献礼,我们送给大家这样一份惊喜。感谢为了新版的功能辛苦测试和完善的朋友们,感...

红薯
2009/10/16
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot Actuator监控使用详解

在企业级应用中,学习了如何进行SpringBoot应用的功能开发,以及如何写单元测试、集成测试等还是不够的。在实际的软件开发中还需要:应用程序的监控和管理。SpringBoot的Actuator模块实现了应...

程序新视界
19分钟前
6
0
JDBC+C3P0+DBCP 基本使用

1.概述 这篇文章主要说了JDBC的基本使用,包括Statement,PreparedStatement,JDBC的连接,Mysql创建用户创建数据表,C3P0的连接与配置,DBCP的连接与配置. 2.mysql的处理 这里的JDBC使用Mysql作为...

Blueeeeeee
今天
7
0
MVC Linux下开发及部署

linux使用的是 Ubuntu 64 位 18.04.2 LTS 首先复制C:\Program Files (x86)\Embarcadero\Studio\20.0\PAServer 下 LinuxPAServer20.0.tar.gz 到 linux 目录下 运行链接编译程序 delphi环境配置......

苏兴迎
今天
11
0
3.控件及其属性

1.文本 2.按钮

横着走的螃蟹
今天
9
0
安装Genymotion模拟器慢的解决方案

第一步点击下载, C:\Users\Administrator\AppData\Local\Genymobile\genymotion.log 中搜索 ova 会发现这个文件 使用迅雷下载即可. 在 虚拟机中导入这个.ova 文件 即可安装...

chenhongjiang
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部