Laravel 如何自动删除表然后导入 sql 文件然后应用迁移?

Laravel how to automate drop tables then import sql file then apply migration?

由于与其他数据库中的 Laravel 不同的命名约定,我需要在 Laravel 中自动执行此过程:

  1. 删除所有表
  2. 导入sql转储文件
  3. 重播我的迁移,重命名列、FK 等...

我该怎么做才能实现这一目标?

php artisan migrate:fresh --seed 命令不起作用,因为它会在最后导入 sql。

你可以为这个任务写一个custom command

  1. 创建命令:php artisan make:command MigrateDatabase

  2. 打开命令文件app/Console/Commands/MigrateDatabase.php

  3. 更改命令名称,即:protected $signature = 'migrate_database:migrate';

  4. handle()方法中写下这些行:

    public function handle(){
        Artisan::call('migrate:reset', ['--force' => true]);
        DB::unprepared(file_get_contents('full/path/to/dump.sql'));
        Artisan::call('migrate');
    }
    
  5. 调用命令:php artisan migrate_database:migrate

运行 在生产之前要小心,我没有测试过。 (当然它会降低你的数据库)