Laravel数据库从旧表中播种

时间:2015-07-01 13:21:18

标签: php database laravel laravel-5 laravel-5.1

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

2 个答案:

答案 0 :(得分:4)

您可以在laravel中使用multiple database connections连接到两个数据库。

配置/ database.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
    ]);  
}

答案 1 :(得分:0)

如果我是你我需要快速 一次解决方案,我会:

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

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

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

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

将其复制并粘贴到数据库播种器中并运行 OR 构造下面的statemens直接在MySQL中运行并在MySQL中运行它。它看起来很愚蠢,但速度很快而且很有效。

上面的代码行没有经过测试,是从内存中写的。