使用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);
答案 0 :(得分:1)
架构shell将为您管理所有差异。你真的不需要跳过任何不必要的箍。你只需要担心两件事:
1-您始终需要保留生成的架构。
cake schema generate
这不仅用于保留基本架构,还用于保存快照。然后,您可以从此创建数据库。
cake schema create
在设置新安装或在数据库中创建不存在的表时使用。这是破坏性的,将删除所有表并重新创建它们。如果您想创建一个缺失的表,可以这样调用它:
cake schema create app {table_name}
2-始终制作架构的快照。这将允许对现有数据库进行非破坏性升级。您可以像这样升级架构:
cake schema update {#}
<强>更新强> 如果您想使这个过程可以由UI运行,您可以从控制器调用shell。我会这样构造它:
这样,如果有人需要升级多个版本,它们都将在同一升级过程中运行。