CakePHP在X天后过期

时间:2012-04-11 23:22:17

标签: php cakephp cakephp-2.0

使用博客教程,我希望有一个选项,您可以在“主”索引页面上查看帖子,直到帖子活动了x天。在x天的这段时间之后,我希望在数据库中将帖子设置为“已过期”。任何人都可以了解实现这一目标的最佳途径吗?

2 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法可能是使用SQL select语句。 MySQL有许多内置的日期方法。但首先,我们需要定义您要完成的任务。另请注意,我们使用的字段(created_atallotted_time)都是DATE字段。

您要做的只是显示当前正在运行的帖子。由于我们知道广告的开始日期,因此我们可以从当前日期中减去开始日期,以确定广告到期前剩余的时间。这可以使用DATEDIFF函数和CURDATE函数来完成。

DATEDIFF(CURDATE(), `created_at`)

如果您尝试执行上述语句,您会注意到它返回一个整数,即自广告首次创建以来经过的天数。由于DATEDIFF返回一个整数,我们还需要将allotted_time转换为整数。

DATEDIFF(`allotted_time`, `created_at`)

现在,我们知道广告已经投放了多长时间以及创建它必须运行的那一天。显然,如果广告的投放时间少于创建日期和分配时间之间的天数,则广告仍然在投放。

WHERE DATEDIFF(CURDATE(), `created_at`) < DATEDIFF(`allotted_time`, `created_at`)

把这些放在一起,我们得到一个类似的声明。

SELECT `id`
FROM `ads`
WHERE
    DATEDIFF(CURDATE(), `created_at`) < DATEDIFF(`allotted_time`, `created_at`)

答案 1 :(得分:0)

如果您使用paginate,请使用:

注意 此处$ x是您的intarval

$this->Post->recursive = 0;
$this->paginate = array(
            'conditions' => array('DATEDIFF(CURDATE(), DATE(Post.created)) >' => $x)
        );
$this->set('posts', $this->paginate());

对于普通的find(),请使用:

$this->Post->find('all', 
                   array(
                    'conditions' => array('DATEDIFF(CURDATE(), DATE(Post.created)) >' => $x)
                   )
                 );