我想同步多个数据库的状态。我想比较其中的表,并创建缺少的表和列。
Php 有一个库,它有很多数据库操作的函数:Phinx不幸的是,只有创建迁移的例子,但它没有解释,如何在没有它的情况下使用它。
如何在不编写迁移的情况下查询和修改数据库结构?
这里的主要问题是同步所有数据库,要通过使用 来做到这一点phinx,您应该决定哪个是最完整的数据库并执行以下操作:
选项 1: 使用应存在的每个表创建“主”迁移,“完整数据库,每个表一个。
<?PHP
public function up()
{
$exists = $this->hasTable('xxx');
if (!$exists) {
$this->execute("CREATE TABLE `xxx` (`xxx_id` int(10) NOT NULL AUTO_INCREMENT);");
}
}
public function down()
{
$exists = $this->hasTable('xxx');
if ($exists) {
$table = $this->table('xxx');
if (!$table->hasColumn('name')) {
$table->addColumn("name", "string", ["limit" => 255])->save();
}
$table->drop();
}
}
Run Code Online (Sandbox Code Playgroud)
但是为每个表创建一个迁移可能是一项艰巨的工作,那么......
选项 2::您可以通过列出表并将它们添加到数组中来动态创建数据库脚本:
<?PHP
public function up()
{
$tables = ['xxx', 'yyy'];
foreach ($tables as $curTable) {
$exists = $this->hasTable($curTable);
if (!$exists) {
$this->execute($this->getCreateTable($curTable));
}
}
}
Run Code Online (Sandbox Code Playgroud)
但随后您应该生成一个名为 的方法getCreateTable来接收table名称并从主数据库获取结构。
之后创建一个例程对字段执行相同的操作,但您可以为每个表获取它们并为每个字段获取嵌套循环。