获取前10条文章评论的模型代码

代码脚本   94阅读

时隔两年,重新把这个独立博客的程序部署起来了,这个博客程序完全根据自己的想法开发的,代码的细节之处都是自己精心编写和把控的,虽然随着中间件的升级,有一些代码存在不兼容的问题,但是相比于重新使用新框架来重复开发的工作量,解决兼容性的问题还是相对容易得多。

重新部署上线前,修复了一些bug,主要是出于安全的角度考虑。从功能上来说,打算以页面右边栏“最新的留言”需求实现为例,来分享一段代码。

在没做修改之前,是直接通过取的评论表里前10条记录作为“最新的留言”返回的。

$query = $this->db->select('*')
        ->from($this->config->item('comments'))
        ->order_by('id','desc')
        ->limit($lmt)
        ->get();
$this->db->close();
return $query->result_array();

这样简单直接明了,而我在重新部署博客的时候,对一些文章进行了“删除”,并没有真正的将数据记录删除,而只是用了一个字段进行标记。

pagedelete由0更新为1,
1表示删除,0表示正常可显示

那么使用上面的获取最新的评论的代码,势必返回了一些已经标记为“删除”的文章的评论,而我的需求是只获取能够正常显示的文章的评论。如果使用现在的一些比较新的框架,只是在模型里增加一行代码就可以实现的,因为框架功能比较强大。而在CI3里面显示是不太好弄,于是乎换了一种写法,重新设计代码,实现了对文章进行过滤。

$this->load->database();
$t_lmt=0;
$t_comment_array = array();
for ($i=0;;$i+=$lmt){
    if ($t_lmt < $lmt){
        $query = $this->db->select('*')
            ->from($this->config->item('comments'))
            ->order_by('id','desc')
            ->limit($lmt,$i)
            ->get()->result_array();
        foreach ($query  as $val){
            if ($t_lmt < $lmt){
                $id = $val['thread_key'];
                $t_query = $this->db->select('pagedelete')
                    ->from($this->config->item('article'))
                    ->where('id',$id)
                    ->get()->row_array();
                if ($t_query['pagedelete'] == 0){
                    array_push($t_comment_array,$val);
                    $t_lmt +=1;
                }
            }
        }
    }else{
        break;
    }
}
$this->db->close();
return $t_comment_array;

上面的代码里用了一个for循环,在for循环里面套一个foreach循环,然后使用break跳出for循环。实现的效果则是从可以显示的文章中选取10条评论作为结果返回,因为$lmt默认等于10。

在写文章的时候,发现上面的这段代码有一个致命问题,就是有可能出现死循环,如果始终无法获取$lmt条评论记录的话,就是一直死循环下去,因此需要给for选择增加一个限制条件,比如$i<100,默认在前100条评论记录里仍然无法取得$lmt条评论的话,就结束循环。


喜欢请常来,打赏请随意。