2016-09-21 3 views
2

Ich habe jetzt neue Struktur meiner Datenbank, aber ich muss die alten Daten in das neue Format importieren. Aus diesem Grund möchte ich den Laravel-Seeder verwenden, aber ich muss mich irgendwie mit der alten Datenbank verbinden und ausgewählte Abfragen machen und dem Seeder mitteilen, wie er die Daten in die neue Datenbank einfügt.Laravel Seed Datenbank von bestehenden Datenbank

Ist das möglich?

+0

Ich denke, Ihre beste Wette ist, Ihre Daten aus der alten Datenbank mit einem Tool wie phpMyAdmin zu exportieren, ändern Sie die Daten Ihres neuen passen Datenbank und laden Sie sie dann hoch. –

+0

durch Ändern Sie im Editor? –

Antwort

0

Konfigurieren Sie Ihre Laravel-App für die Verwendung von zwei mysql-Verbindungen (How to use multiple database in Laravel), eine für die neue Datenbank, die andere für die alte.

Ich werde es fälschen wie old und new.

In Ihren Samen lesen Sie aus der alten Datenbank und schreiben Sie in die neue.

$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 
     // ... 
    ]); 
} 

Stellen Sie sicher, Nachrichten hinzufügen, während wie $this->command->info('Users table seeded'); oder sogar einen Fortschrittsbalken Impfen (Sie Befehlszeile Methoden zugreifen können) Sie sind, an welcher Stelle der Einfuhr kennen.

+0

Danke @phaberest, leider vermisse ich etwas. Ich habe eine zweite Verbindung (mysql_old) wie im Beispiel gemacht und den Namen in die neue DB: connection ('mysql_old') eingetragen. Mit all() gibt es mir Aufruf zur undefinierten Methode Query \ Builder :: all(). Ich habe mit select() versucht und ich habe eine print_r ($ old_users); und hier kommt der seltsame Teil. Es druckt mir das gesamte MysqlConnection-Objekt, aber im Config-Teil ist der Name 'mysql_old', aber die Datenbank ist die falsche von 'mysql' Verbindung. –

+0

Stellen Sie sicher, dass Sie in Ihrer 'config/database.php' keine' .env'-Variablen referenzieren, da diese Vorrang vor allen anderen Einstellungen haben. Du hast mich erwischt ... es muss 'get()' anstelle von 'all()' sein: D – phaberest

+0

danke @phaherest! –

1

Versuchen: Beispiele:

php artisan iseed my_table 
php artisan iseed my_table,another_table 

Besuch: https://github.com/orangehill/iseed

+0

das Problem mit diesem Paket ist die Tabellen, von denen wir eine Sämaschine erstellen möchten, müssen wir darüber erzählen In meinem Fall möchte ich eine Sämaschine für alle Tabellen erstellen und dieses Paket schlägt fehl um dieses Ziel zu erreichen. Wenn ich etwas vermisse bitte Beratung – Gardezi