База данных семян 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 поэтому он получит все таблицы из вашей существующей базы данных и начнет создавать сеялки для всех таблиц

Другие вопросы по тегам