info('Starting migration for presseecho.de...'); // Holen der Brand-ID für Presseecho aus der neuen DB $brand = Brand::where('domain', 'presseecho.de')->first(); if (! $brand) { $this->error('Brand "presseecho.de" not found in the new database. Please seed brands first.'); return 1; } // Deaktivieren von Foreign Key Checks für reibungsloses Einfügen DB::connection('mysql')->statement('SET FOREIGN_KEY_CHECKS=0;'); // Starten der einzelnen Migrationsschritte $this->migrateUsers(); $this->migrateArticles($brand->id); // $this->migrateCategories($brand->id); // Weitere Schritte hier hinzufügen // Reaktivieren der Foreign Key Checks DB::connection('mysql')->statement('SET FOREIGN_KEY_CHECKS=1;'); $this->info('Migration for presseecho.de completed successfully!'); return 0; } private function migrateUsers() { $this->line('Migrating users...'); $progressBar = $this->output->createProgressBar(LegacyUser::count()); $progressBar->start(); // Chunking verwenden, um den Speicher bei vielen Nutzern zu schonen LegacyUser::chunk(200, function ($legacyUsers) use ($progressBar) { foreach ($legacyUsers as $legacyUser) { // Prüfen, ob der Nutzer (anhand der E-Mail) bereits in der neuen DB existiert $existingUser = NewUser::where('email', $legacyUser->email)->first(); if (! $existingUser) { // Nutzer existiert noch nicht -> neu anlegen NewUser::create([ 'name' => $legacyUser->name, 'email' => $legacyUser->email, 'password' => $legacyUser->password, // Annahme: Passwörter sind bereits gehasht. Wenn nicht: Hash::make(Str::random(16)) und Passwort-Reset erzwingen 'email_verified_at' => $legacyUser->created_at, // oder ein anderer Zeitstempel 'created_at' => $legacyUser->created_at, 'updated_at' => $legacyUser->updated_at, // ... weitere Felder mappen ]); } $progressBar->advance(); } }); $progressBar->finish(); $this->newLine(2); } private function migrateArticles(int $brandId) { $this->line('Migrating articles...'); $progressBar = $this->output->createProgressBar(LegacyArticle::count()); $progressBar->start(); LegacyArticle::chunk(200, function ($legacyArticles) use ($brandId, $progressBar) { foreach ($legacyArticles as $legacyArticle) { // Den zugehörigen Nutzer in der NEUEN Datenbank finden $author = NewUser::where('email', $legacyArticle->author_email)->first(); // Annahme: Artikel hat eine Autoren-E-Mail if (! $author) { $this->warn("Skipping article ID {$legacyArticle->id}, author with email {$legacyArticle->author_email} not found."); continue; // Artikel überspringen, wenn kein Autor gefunden wurde } // Neuen Artikel in der zentralen DB erstellen $newArticle = NewArticle::create([ 'user_id' => $author->id, 'title' => $legacyArticle->title, 'slug' => $legacyArticle->slug, // oder neu generieren: Str::slug($legacyArticle->title) 'content' => $legacyArticle->body, // Spaltennamen anpassen 'created_at' => $legacyArticle->created_at, 'updated_at' => $legacyArticle->updated_at, // ... weitere Felder mappen ]); // Den Artikel mit der Plattform "Presseecho" verknüpfen // Dies fügt den Eintrag in die Pivot-Tabelle `article_platform` ein $newArticle->platforms()->attach($brandId, [ 'status' => 'published', // oder den alten Status übernehmen 'published_at' => $legacyArticle->published_date, // eventuell weitere Pivot-Daten ]); $progressBar->advance(); } }); $progressBar->finish(); $this->newLine(2); } }