php中的调试功能问题

时间:2009-08-13 08:11:39

标签: php cakephp

我对Cake PHP框架相对较新,并尝试了很少的东西。我做了一个博客数据库。我试图使用debug()函数查看特定年份中发布的一系列帖子。 我在帖子模型中写了以下函数。

function findByYear($year = null){
        $date = $year.'-01-01 00:00:00';
        $end_date = $year.'-12-31 23:59:59';
        return $this->find('all',array('conditions'=>array('DATE(Post.date)'=>'>'.$date,'DATE(Post.date)'=>'<'.$end_date)));

    }

然后我在posts_controller中包含了一个read函数。

function read($year=null) {
         if (!$year) {
            $this->Session->setFlash('Please supply a year');
            $this->redirect(array('action'=>'index'));
        }
        $this->set('posts',$this->Post->findByYear($year));
    }

最后,创建了一个读取视图文件(read.ctp)并在其中包含了调试功能

<?php debug($posts) ?>

现在,问题是当我在URL中启动操作时,我得到一个空数组: http://localhost/posts/read/2009 我已经有3个帖子,但我没有在阵列中获得任何帖子。 我错过了什么?

2 个答案:

答案 0 :(得分:2)

我认为问题是“&lt;”的位置和“&gt;”运营商,因为他们必须处于“关键”方面,而不是“价值”方面。变化

'DATE(Post.date)' => '>'.$date

'DATE(Post.date) >' => $date

同样适用于其他条件。

答案 1 :(得分:1)

conditions数组可以是混合类型(也就是说它可以包含字符串以及数组)。将基于日期的条件表示为字符串可能更容易,因为您使用的是范围而不是日期上的完全匹配。例如:

$conditions   = array();
$conditions[] = array('Post.id'=>$myId);
$conditions[] = 'DATE(Post.date) > '.$date;

$posts        = $this->find('all',array('conditions'=>$conditions));

(一个辅助的好处是,凡人都可以轻松解析。)

另一点 - 您应该考虑使用mktime()函数来构建日期字符串,而不是简单地将参数连接到字符串的前面并希望最好。这有助于提供$year参数的一些基本验证以及降低获得意外结果的可能性的双重目的。例如:

$date     = mktime(0,0,0,1,1,$year); //$year.'-01-01 00:00:00';
$end_date = mktime(23,59,59,12,31,$year); //$year.'-12-31 23:59:59';

这将以unix时间戳格式设置两个日期值,这是你想要的,所以从几乎每个角度都是胜利。

祝你好运!