首页 > 解决方案 > Laravel如何自动删除表然后导入sql文件然后应用迁移?

问题描述

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

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

我能做些什么来实现这一目标?

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

标签: laravellaravel-8laravel-migrations

解决方案


您可以为此任务编写自定义命令。

  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

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


推荐阅读