Use Laravel seed and sql files to populate database

后端 未结 4 1654
忘了有多久
忘了有多久 2021-01-30 11:28

I got several .sql files of countries, states and cities of the world from github. How can I run them with Laravel\'s seed files to populate those tables in my database?

相关标签:
4条回答
  • 2021-01-30 12:01

    @Andre Koper solutions is understandable, but sadly it doesn't work for me. This one is a bit confusing but atleast works for me.

    So instead of using DB::unprepared, I use this:

    // DatabaseSeeder.php
    class DatabaseSeeder extends Seeder {
    
        public function run()
        {
           // Set the path of your .sql file
           $sql = storage_path('a_id_territory.sql');
    
           // You must change this one, its depend on your mysql bin.
           $db_bin = "C:\wamp64\bin\mariadb\mariadb10.3.14\bin";
    
           // PDO Credentials
           $db = [
               'username' => env('DB_USERNAME'),
               'password' => env('DB_PASSWORD'),
               'host' => env('DB_HOST'),
               'database' => env('DB_DATABASE')
           ];
           exec("{$db_bin}\mysql --user={$db['username']} --password={$db['password']} --host={$db['host']} --database {$db['database']} < $sql");
        }
    }
    

    Then while migrating database just add --seed

    php artisan migrate:refresh --seed
    

    or

    php artisan migrate:fresh --seed
    

    Tested on Laravel 7.0.x

    0 讨论(0)
  • 2021-01-30 12:04
    1. Add DB::unprepared() to the run method of DatabaseSeeder.
    2. Run php artisan db:seed at the command line.

      class DatabaseSeeder extends Seeder {
      
          public function run()
          {
              Eloquent::unguard();
      
              $this->call('UserTableSeeder');
              $this->command->info('User table seeded!');
      
              $path = 'app/developer_docs/countries.sql';
              DB::unprepared(file_get_contents($path));
              $this->command->info('Country table seeded!');
          }
      }
      
    0 讨论(0)
  • 2021-01-30 12:04

    I found a package that creates seed files from database tables and rows. It currently supports Laravel 4, 5, 6 and 7:

    https://github.com/orangehill/iseed

    In the end, it's basically as easy as this:

    php artisan iseed my_table
    

    or for multiple occasions:

    php artisan iseed my_table,another_table
    
    0 讨论(0)
  • 2021-01-30 12:05

    As used by other answers, DB::unprepared does not work with more complex SQL files.

    Another better solution would be to use the MySQL cli directly inside a process:

    $process = new Process([
                'mysql',
                '-h',
                DB::getConfig('host'),
                '-u',
                DB::getConfig('user'),
                '-p' . DB::getConfig('password'),
                DB::getConfig('database'),
                '-e',
                "source path/to/schema.sql"
            ]);
            $process->mustRun();
    
    0 讨论(0)
提交回复
热议问题