php - 获取两个架构快照的差异以更新 CakePHP 应用程序

标签 php cakephp

使用 CakePHP,我有两个快照。我希望获得两者的差异,然后使用该差异生成一个非破坏性 MySQL 更新命令。

这是我到目前为止所得到的,它返回一个 alter table MySQL 命令,但是,这不起作用,因为我需要先创建所述表。

    $this->Schema = new CakeSchema();
    $db = ConnectionManager::getDataSource($this->Schema->connection);
    $options = array();
    $Old = $this->Schema->read($options);
    $Schema = $this->Schema->load();
    $compare = $this->Schema->compare($Old, $Schema);
    $contents = array();

    if (empty($table)) {
        foreach ($compare as $table => $changes) {
            $update = $db->alterSchema(array($table => $changes), $table);
        }
    }
    $this->Installer->query($update);

最佳答案

架构 shell 将为您管理所有差异。你真的不需要跳过任何不必要的障碍。您只需要担心两件事:

1-您始终需要保留生成的架构。

cake schema generate

这不仅用于保存您的基本架构,还用于保存您的快照。然后,您可以从中创建数据库。

cake schema create

这在设置新安装或在数据库中创建不存在的表时使用。这是破坏性的,会删除所有表并重新创建它们。如果你想创建一个缺失的表,你可以这样调用它:

cake schema create app {table_name}

2- 始终为您的模式创建快照。这将允许对现有数据库进行非破坏性升级。您可以像这样升级您的架构:

cake schema update {#}

更新: 如果您想使其成为可由 UI 运行的进程,您可以从 Controller 调用 shell。我会这样构造它:

  • 在代码(Bootstrap)中保留版本号,让用户保持最新状态
  • 数据库中的版本比较版本以确定是否需要
  • upgrade 为每个需要升级的版本调用升级 shell
  • 每个升级版本都有一个由升级调用的任务
    外壳

这样,如果有人需要升级多个版本,它们都将在同一个升级过程中运行。

关于php - 获取两个架构快照的差异以更新 CakePHP 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12275901/

相关文章:

php - 图标未加载

php - 优化这个mysql查询

php - 每分钟 Cronjob

php - PHP 语句中的 SQL 变量

php - 那么当我们在 PHP 中使用 'new' 时到底发生了什么

cakephp - 如何在cakephp 4中使用App Model,想在所有模型上执行SAVE查询后调用一个方法

cakephp - 如何配置 PhpStorm 10.x 以在 CakePHP 3.x 中运行单元测试?

mysql - 如何使用cakephp在where条件下使用sum函数

cakephp - CAKE PHP 更改日期格式

php - 为什么我的 if 语句忽略了我的条件?