来自现有数据库的Laravel种子数据库

时间:2016-09-21 21:17:51

标签: mysql laravel laravel-seeding

我现在有了我的数据库的新结构,但我需要以新格式导入旧数据。出于这个原因,我想使用Laravel播种机,但我需要以某种方式连接到旧数据库并进行选择查询并告诉播种者如何将数据放入新数据库。

这可能吗?

3 个答案:

答案 0 :(得分:3)

尝试: 例子:

php artisan iseed my_table
php artisan iseed my_table,another_table

访问:https://github.com/orangehill/iseed

答案 1 :(得分:0)

配置您的laravel应用程序以使用两个mysql连接(How to use multiple database in Laravel),一个用于新数据库,另一个用于旧数据库。

我会假装oldnew

在种子中读取旧数据库并写入新数据库。

$old_user = DB::connection('old')->table('users')->get();

foreach ($old_users as $user) {
     DB::connection('new')->table('users')->insert([
         'name'     => $user->name,
         'email'    => $user->email,
         'password' => $user->password,
         'old_id'   -> $user->id
         // ...
     ]);
}

确保在播种时添加消息,如$this->command->info('Users table seeded');甚至是进度条(您可以访问命令行方法),以了解导入的位置。

答案 2 :(得分:0)


下载软件包 Git回购:https://github.com/orangehill/iseed
然后在文件src / Orangehill / Iseed / IseedCommand.php下更新 在第75行添加以下代码

// update package script
    if($this->argument('tables') === null){
        $tables = Schema::getConnection()->getDoctrineSchemaManager()->listTableNames();
    }

并使用以下代码更新同一文件中的getArguments方法

array('tables', InputArgument::OPTIONAL, 'comma separated string of table names'),

然后运行php artisan iseed,这样它将从您现有的数据库中获取所有表,并开始为所有表创建种子。