现有数据库与laravel迁移同步

时间:2016-01-21 19:44:47

标签: php laravel

我使用mysql workbench设计了一个数据库并进行同步,然后我的mysql数据库存在@ phpmyadmin。那么如何在laravel中使用这个数据库..我的意思是我需要为现有数据库创建迁移文件并继续编辑..

4 个答案:

答案 0 :(得分:2)

您应该编写迁移文件,这样您的架构可以从零构建而无需手动干预。但是,如果您不能或不想这样做,您可以从您想要的点开始迁移:

php artisan make:migration blablabla

编写新架构并:

php artisan migrate

等等。

答案 1 :(得分:0)

你可以这个包 Migrations Generator

  1. 将其包含在您的项目中(通过作曲家或直接将其下载到您的供应商文件夹中)并配置服务提供商。
  2. 运行:php artisan migrate:generate以生成当前数据库中所有表的迁移。要为特定表生成迁移,请运行php artisan migrate:generate table1,table2,table3,table4,table5

答案 2 :(得分:0)

在开发阶段,您可以使用:https://github.com/awssat/laravel-sync-migration

通过使用:

php artisan migrate:sync

但是我不建议您将其用于生产,因为您无法跟踪迁移更改

答案 3 :(得分:0)

我的情况如下:

  • 我在database / migrations文件夹中有数百个迁移类。
  • 我的课程已经迁移,但是在某个时候我导入了一个旧的 版本的迁移表是偶然的。
  • 我的迁移表中的记录少于我的类。

尝试了所有事情之后,我决定多走一英里,以这种方式解决我的问题:

我在临时控制器中创建了一个方法。基本上,它将检查我的所有迁移类在database / migrations文件夹中,然后检查它们是否存在于迁移表中。如果不是,请将其插入表中。从浏览器调用了该方法,现在一切都同步了

 public function syncMigration(){
        $migrations_folder = database_path('migrations');
        $filesInFolder = File::files($migrations_folder);
        $lastMigration = DB::table('migrations')->orderBy('batch', 'desc')->limit(1)->first();
        var_dump($lastMigration);

        $batch = $lastMigration->batch +1;


        foreach($filesInFolder as $path) {
            $file = pathinfo($path);
            $migration = DB::table('migrations')->where('migration', $file['filename'])->first();
            if(!$migration){
                DB::table('migrations')->insert(
                    [
                        'migration' => $file['filename'],
                        'batch' => $batch
                    ]
                );
            }
        }
    }