first commit
This commit is contained in:
commit
405df0a122
3083 changed files with 69203 additions and 0 deletions
138
app/Console/Commands/MigratePresseData.php
Normal file
138
app/Console/Commands/MigratePresseData.php
Normal file
|
|
@ -0,0 +1,138 @@
|
|||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
// Import der Models für die NEUE Struktur
|
||||
use App\Models\User as NewUser;
|
||||
use App\Models\Article as NewArticle;
|
||||
use App\Models\Brand;
|
||||
|
||||
// Import der Models für die ALTE Struktur
|
||||
use App\Models\Legacy\Presseecho\User as LegacyUser;
|
||||
use App\Models\Legacy\Presseecho\Article as LegacyArticle;
|
||||
|
||||
class MigratePresseechoData extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'migrate:presseecho';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Migrates all data from the old presseecho.de database to the new central database';
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$this->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);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue