【问题标题】:Managing data with CakePHP Schema and Migrations使用 CakePHP Schema 和 Migrations 管理数据
【发布时间】:2014-06-18 18:40:33
【问题描述】:

我了解蛋糕模式管理在生成、创建、更新、转储等方面的工作原理。我的问题是在进行迁移时如何正确维护我的数据版本以及表结构?显然,当创建旧模式时,例如,表被删除并重新创建,导致数据丢失。也许这不是 cakephp 特定的问题,但管理/保护数据版本的最佳方法是什么,同时仍然有一种强大的方法来回退到不同版本的模式?是否只是假设我定期备份/导出我的数据库?有没有办法以编程方式使用 before/after 方法来提取现有数据并在创建模式时恢复该数据?我知道有插入行的代码,但实际上我无法继续为不断变化的大型数据库创建代码。

可以理解,已删除的列/表中的数据无法恢复,但我对此并不陌生,并试图围绕在使用 cakephp 创建模式时保持不变的表/列中的数据不丢失的概念展开思考。感谢任何用于管理模式+数据的 cakephp 特定工作流程或针对此主题的任何其他通用建议。

【问题讨论】:

    标签: cakephp migration schema


    【解决方案1】:

    请改用CakeDC migrations plugin。它不会删除整个数据库并在每次迁移时保留一个迁移文件。 默认情况下,不会认为迁移会保留您的数据,它们会更改架构,并且当您删除字段或更改字段时,预计数据会被删除或更改。 负责创建备份。

    迁移工具不是备份工具。

    应用程序应该通过一些脚本进行部署,或者至少有一些脚本可以被触发以在执行迁移之前创建数据库的备份。无论您使用什么程序(例如 Liquibase)或 CakePHP 插件。最佳实践是在部署任何新版本之前进行数据库备份,即使不涉及迁移。不仅迁移可以更改数据库,而且例如弄乱您的价格计算的错误也会导致混乱。

    迁移插件和架构外壳在回调之前和之后提供。您可以在那里实现您的自定义逻辑,以通过 shell_exec() 触发外部 bash 脚本,以在之前的回调中备份您的数据库。 See the callbacks for the migration plugin here.

    【讨论】:

    • 谢谢。我需要建立一个强大的 before() 方法。当你说 CakeDC 使用单独的迁移文件时,这和 cake schema generate -s(创建快照文件)有什么不同吗?
    猜你喜欢
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 2011-08-29
    • 1970-01-01
    相关资源
    最近更新 更多