cakePHP自动从mysql中删除数据

时间:2013-02-14 14:53:59

标签: mysql database cakephp

该表格包含以下字段:id, date, user_id, city, price

我希望自动删除超过1年的行,但我不确定如何执行此操作。它应该由应用程序还是数据库完成?怎么样?

这里的另一个问题是每年将有大约50,000个插入。几年后“id”领域会发生什么?这个数字会不会太大?在这种情况下可以做些什么?

非常感谢提前。

2 个答案:

答案 0 :(得分:3)

我建议creating a basic shell处理删除记录,并安排在您希望检查应删除的记录时运行的cron作业。 shell可能非常简单,如下所示:

class JanitorShell extends AppShell {
    // put the model you wish to delete from here
    public $uses = array('Model'); 

    public function main() {
        $this->Model->deleteAll(array(
          'Model.created <' => date('Y-m-d', '-1 year')
        ));
        $this->out('Records deleted.');
    }
}

然后你的cron作业将运行你的shell。要运行shell,请调用:

cake -app /path/to/app janitor

这假定cake在您的路径中。当然,这是一个非常基本的shell,可以很容易地扩展,保存已删除的日志,甚至只是将删除的记录移动到新表,一种“软删除”。您可能不应该在main()中放置这样的破坏性代码,因为每次运行shell时它都会运行,但这会让您开始。

要回答你的第二个问题,每年50k插入是没有什么可担心的。要了解主键的限制,请阅读MySQL数据类型。

答案 1 :(得分:0)

实际上我认为它应该是

日期('Y-m-d',strtotime(' - 1年'))