如何使用laravel从旧数据库表中的数据填充新表?两个数据库都有不同的结构。是否可以使用Laravel播种?
答案 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中运行它。它看起来很愚蠢,但速度很快而且很有效。
上面的代码行没有经过测试,是从内存中写的。