База данных семян Laravel из существующей базы данных
У меня теперь новая структура моей базы данных, но мне нужно импортировать старые данные в новом формате. По этой причине я хочу использовать сеялку Laravel, но мне нужно каким-то образом подключиться к старой базе данных и выполнить запросы на выборку и сообщить сеялке, как поместить данные в новую базу данных.
Это возможно?
2 ответа
Сконфигурируйте ваше приложение laravel для использования двух соединений mysql ( Как использовать несколько баз данных в Laravel), одно для новой базы данных, другое для старой.
Я подделаю это как old
а также new
,
В ваших семенах читайте из старой базы данных и пишите в новую.
$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
поэтому он получит все таблицы из вашей существующей базы данных и начнет создавать сеялки для всех таблиц