1

如何使用 laravel 从旧数据库表中的数据填充新表?两个数据库都有不同的结构。是否可以使用 Laravel 播种?

4

2 回答 2

4

您可以在 laravel 中使用多个数据库连接来连接到这两个数据库。

配置/数据库.php

return [
    'connections' => [
        'old_db' => [
            'driver'    => 'mysql',
            'host'      => env('DB_HOST_OLD'),
            'database'  => env('DB_DATABASE_OLD'),
            'username'  => env('DB_USERNAME_OLD'),
            'password'  => env('DB_PASSWORD_OLD'),
        ],
        'new_db' => [
            'driver'    => 'mysql',
            'host'      => env('DB_HOST'),
            'database'  => env('DB_DATABASE'),
            'username'  => env('DB_USERNAME'),
            'password'  => env('DB_PASSWORD'),
        ],
    ],
];

然后在您的种子文件中,您可以连接到旧数据库并遍历这些项目并将它们插入新数据库

UserTableSeeder.php

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

foreach($users as $user){
    DB::connection('new_db')->table('users')->insert([
        'name' => $user->username, //different fieldnames
        'email' => $user->emailaddress, //different fieldnames
    ]);  
}
于 2015-07-01T13:59:19.307 回答
0

如果我是你并且我需要FAST 一次性解决方案,我会:

使用 DB 外观从旧表中获取数据:

 $rows = DB::table('users')->get();    

构造我的 foreach 东西,它在数据库播种器中工作并回显它:

foreach ($rows as $row) {
  echo("DB::table('table')->insert(array(
    'name' => '$row->name',
    'email' => '$row->email'
  ));
  <br />");
}

将其复制并粘贴到数据库播种器中并运行它在下面的结构语句中直接在 MySQL 中工作并在 MySQL 中运行它。它看起来很愚蠢,但非常快并且有效。

上面的代码行未经测试,是从内存中编写的。

于 2015-07-01T13:50:25.070 回答