php - 如何在没有迁移的情况下使用 Phinx?

标签 php phinx

我想同步多个数据库的状态。我想比较其中的表,并创建缺少的表和列。

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();
        }
    }


但是为每个表创建一个迁移可能是一项艰巨的工作,然后......

选项 2: :您可以通过列出表并将它们添加到数组中来动态创建数据库脚本:

<?PHP

    public function up()
    {
        $tables = ['xxx', 'yyy'];
        foreach ($tables as $curTable) {
             $exists = $this->hasTable($curTable);
             if (!$exists) {
                   $this->execute($this->getCreateTable($curTable));
             }
        }

    }


但是你应该生成一个名为 getCreateTable 的方法接收 table命名并从主数据库中获取结构。

之后创建一个例程来对字段执行相同的操作,但您可以为每个表和每个字段的嵌套循环获取它们。

关于php - 如何在没有迁移的情况下使用 Phinx?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58064447/

相关文章:

PHP Session 字符串限制

javascript - Laravel Jquery Ui Ajax 发布到 Controller 并为 Blade 获取值(value)

php - 文件 "phinx.yml"不存在

mysql - Cakephp 3.3迁移如何设置外键约束?

php - Phinx - php 应用程序的数据库迁移 - postgreSQL 模式不起作用

php - 什么时候将 "?>"放在 php 文件的末尾?

php - 如何使用 createCommand 在 yii2 中获取最后插入的 id?

php - 使用select in select限制mysql查询

cakephp-3.0 - CakePHP 3 迁移缺少枚举