CakePHP在X天后过期

CakePHP在X天后过期,php,cakephp,cakephp-2.0,Php,Cakephp,Cakephp 2.0,使用博客教程,我想有一个选项,您可以看到“主”索引页上的文章,直到文章已被激活x天。在这个x天的时间段之后,我想在数据库中将帖子设置为“过期”。有谁能解释一下实现这一点的最佳方法吗?最好的方法可能是使用SQL select语句。MySQL有许多内置的日期方法。但首先,我们需要定义您想要实现的目标。还要注意的是,我们使用的字段(在创建,分配的时间)都是日期字段 您要做的是只显示当前正在运行的帖子。由于我们知道广告开始的日期,我们可以从当前日期减去开始日期,计算出广告到期前我们还有多少时间。这可以通

使用博客教程,我想有一个选项,您可以看到“主”索引页上的文章,直到文章已被激活x天。在这个x天的时间段之后,我想在数据库中将帖子设置为“过期”。有谁能解释一下实现这一点的最佳方法吗?

最好的方法可能是使用SQL select语句。MySQL有许多内置的日期方法。但首先,我们需要定义您想要实现的目标。还要注意的是,我们使用的字段(
创建,
分配的时间
)都是
日期
字段

您要做的是只显示当前正在运行的帖子。由于我们知道广告开始的日期,我们可以从当前日期减去开始日期,计算出广告到期前我们还有多少时间。这可以通过
DATEDIFF
功能和
CURDATE
功能实现

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

DATEDIFF(`allotted_time`, `created_at`)
现在我们知道了广告还有多少时间在运行,以及广告创建后需要运行多少天。显然,如果广告的运行时间少于创建日期和分配时间之间的天数,则广告仍在运行

WHERE DATEDIFF(CURDATE(), `created_at`) < DATEDIFF(`allotted_time`, `created_at`)
WHERE DATEDIFF(CURDATE(),`created_at`)
把这些放在一起,我们会得到一个类似的声明

SELECT `id`
FROM `ads`
WHERE
    DATEDIFF(CURDATE(), `created_at`) < DATEDIFF(`allotted_time`, `created_at`)
选择'id'`
从`广告`
哪里
DATEDIFF(CURDATE(),`created_at`)
如果使用paginate,则使用:

注意这里$x是您的账户

对于普通的find(),请使用以下命令:

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

你不能根据日期来选择吗?选择。。。其中
YOUR_DATE
>DATE_SUB(now(),INTERVAL 10 DAY)…是的,但我希望它将数据库中的一个值实际更改为“expired”。听起来设计很糟糕。但如果您必须每天运行cron作业来进行更新。。。设置expired=1,其中您的日期>日期子项(现在(),间隔10天)我将详细解释。这是一个上市网站,人们可以把他们的动物放在那里供收养,他们可以设定他们希望上市的时间,即7-14天。每个列表在数据库中都有一个“状态”字段。它从挂起>接受>过期| |通过。当列表达到分配的天数时,我需要将状态更改为“过期”。我不确定是否需要将任何内容设置为过期。。如果要改进SQL语句,您需要做的就是我希望数据库中的一个值更改为“expired”,而不仅仅是将其从视图中删除。为什么?只有在数据库中添加一个新列才能获得什么具体操作?我会详细解释。这是一个上市网站,人们可以把他们的动物放在那里供收养,他们可以设定他们希望上市的时间,即7-14天。每个列表在数据库中都有一个“状态”字段。它从挂起>接受>过期| |通过。当列表到达分配的天数时,我需要将状态更改为“过期”。然后我假设您有一个开始字段和一个分配的时间字段。我说的对吗?我有一个创建、修改和运行时间字段。
$this->Post->find('all', 
                   array(
                    'conditions' => array('DATEDIFF(CURDATE(), DATE(Post.created)) >' => $x)
                   )
                 );