Can I import a mysql dump to a laravel migration?

后端 未结 10 1884
离开以前
离开以前 2020-12-24 11:46

I have a complete database and need to create migration. I guess there must be a way to do it from a dump but not sure. Is there any way automatically or at least easier to

相关标签:
10条回答
  • 2020-12-24 12:01

    Another alternative is using the PDO directly:

    use Illuminate\Support\Facades\DB;
    use Illuminate\Support\Facades\File;
    
    $sql_dump = File::get('/path/to/file.sql');
    DB::connection()->getPdo()->exec($sql_dump);
    
    0 讨论(0)
  • 2020-12-24 12:02

    I have a complete database and need to create migration. I guess there must be a way to do it from a dump but not sure. Is there any way automatically or at least easier to do this task?

    Not automatically, but we run dumps in a migration using DB::unprepared(). You could use file_get_contents to import from a .sql file and thus not have to worry about escaping the entire dump's " marks...

    <?php
    
    use Illuminate\Database\Migrations\Migration;
    
    class ImportDump extends Migration {
    
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            DB::unprepared("YOUR SQL DUMP HERE");
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
    
        }
    
    }
    
    0 讨论(0)
  • 2020-12-24 12:03

    Simple solution provided by Laravel Article for generating migration file from an existing database table.

    Try: https://laravelarticle.com/laravel-migration-generator-online

    0 讨论(0)
  • 2020-12-24 12:04

    This question is answered already, but recently in a project, the provided answers did not satisfy my needs any longer. It also does not import a whole database dump, but one (large) table. I felt I should share that with you.

    The problem was, I wanted to import a quite large table (list of zipcodes) during my artisan:migrate operation. The solution with DB::unprepared($dump) took way to long and I found an alternative which is MUCH faster.

    Just export your table as CSV and use the following Code in your migration's up() function.

        // i had to str_replace the backslash on windows dev system... but works on linux, too
        $filename = str_replace("\\", "/", storage_path('path/in/storage/to/your/file.csv'));
    
        $query = "LOAD DATA LOCAL INFILE '".$filename."' INTO TABLE yourtable
            FIELDS TERMINATED BY '\t'
            ENCLOSED BY ''
            LINES TERMINATED BY '\n'
            IGNORE 0 LINES
            (col1,col2,...);";
    
        DB::unprepared($query);
    

    Just update the query as you need. And of course, you should make sure, that the table with the cols 'col1', 'col2' etc... exists. I created it just before the importing of the file. with Schema::create()...

    If you run into following error message:

    PDO::exec(): LOAD DATA LOCAL INFILE forbidden
    

    There is a way you can get rid of this message: Although it's not really documented you can just add an 'options' key to your config/database.php file. For example mine looks like that:

            'mysql' => [
            'driver'    => 'mysql',
            'host'      => env('DB_HOST', 'localhost'),
            'database'  => env('DB_DATABASE', 'forge'),
            'username'  => env('DB_USERNAME', 'forge'),
            'password'  => env('DB_PASSWORD', ''),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
            'options'   => array(
                PDO::MYSQL_ATTR_LOCAL_INFILE => true,
            )
    

    Note: i'm currently using laravel 5 but it should work with laravel 4, too.

    0 讨论(0)
  • 2020-12-24 12:05

    You can use Raahul/Larryfour Package, A model and migration generator for Laravel 4

    Raahul/Larryfour Package

    After insallation you can use a command line to create a migration from existed database like this:

    php artisan raahul:fromdb --only yourdatabase
    

    And you will find the migration in app/migrations/ folder

    0 讨论(0)
  • 2020-12-24 12:07

    another solution work for me in Laravel 5.2:

    DB::unprepared(File::get('full/path/to/dump.sql'));

    0 讨论(0)
提交回复
热议问题