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

Laravel seed database from existing database

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

这可能吗?

将您的 laravel 应用配置为使用两个 mysql 连接 (),一个用于新数据库,另一个用于旧数据库。

我会伪装成 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'); 甚至是进度条(您可以访问命令行方法)以了解您处于导入的哪个阶段。

尝试: 示例:

php artisan iseed my_table
php artisan iseed my_table,another_table

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


下载包 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 所以它将从现有数据库中获取所有表并开始为所有表创建播种机