LMIV-SNACKAUTOMAT/database/seeders/UpdateTenantPublicSlugs.php

61 lines
1.9 KiB
PHP

<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\Tenant;
class UpdateTenantPublicSlugs extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$tenants = Tenant::whereNull('public_slug')->get();
foreach ($tenants as $tenant) {
$publicSlug = $this->generatePublicSlug($tenant);
$tenant->public_slug = $publicSlug;
$tenant->save();
echo "Updated {$tenant->name} with public_slug: {$publicSlug}\n";
}
}
private function generatePublicSlug(Tenant $tenant): string
{
// Generiere public_slug basierend auf dem Namen
$name = strtolower($tenant->name);
// Basis-Slug aus dem Namen generieren
$baseSlug = str_replace([' ', 'ä', 'ö', 'ü', 'ß'], ['-', 'ae', 'oe', 'ue', 'ss'], $name);
$baseSlug = preg_replace('/[^a-z0-9-]/', '', $baseSlug);
$baseSlug = preg_replace('/-+/', '-', $baseSlug); // Mehrfache Bindestriche entfernen
$baseSlug = trim($baseSlug, '-');
// Spezielle Mappings falls gewünscht
if (str_contains($name, 'firma 1')) {
$baseSlug = 'firma-1';
} elseif (str_contains($name, 'firma 2')) {
$baseSlug = 'firma-2';
} elseif (str_contains($name, 'firma 3')) {
$baseSlug = 'firma-3';
}
// Stelle sicher, dass public_slug eindeutig ist
$counter = 1;
$publicSlug = $baseSlug;
while (Tenant::where('public_slug', $publicSlug)
->where('id', '!=', $tenant->id)
->exists()) {
$publicSlug = $baseSlug . '-' . $counter;
$counter++;
}
return $publicSlug;
}
}