public function diff(Table $oldTable) { $ret = []; $old = $oldTable->columns; $new = $this->columns; if ($this->engine != $oldTable->engine) { $ret[] = "ALTER TABLE `{$this->name}` ENGINE = {$this->engine};"; } foreach ($new as $name => $column) { if (isset($old[$name])) { $str = $column->getQueryAdd(); if ($str != $old[$name]->getQueryAdd()) { $ret[] = $column->getQueryChange(); } } else { if (!isset($old[$name])) { $ret[] = $column->getQueryAdd(); } } } $old = $oldTable->getKeys(); $new = $this->getKeys(); foreach ($old as $key => $entries) { if (!isset($new[$key])) { $ret[] = "ALTER TABLE `{$this->name}` DROP INDEX `{$key}`;"; } } foreach ($new as $key => $group) { if (isset($old[$key])) { $str = $group->getQueryAdd(); if ($str != $old[$key]->getQueryAdd()) { $ret[] = $group->getQueryDrop(); $ret[] = $group->getQueryAdd(); } } else { $ret[] = $group->getQueryAdd(); } } $ret = trim(implode("\n", $ret)); return $ret ? $ret . "\n" : ''; }