272 lines
11 KiB
PHP
272 lines
11 KiB
PHP
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use App\Models\Event;
|
|
use App\Models\EventOccurrence;
|
|
use App\Models\Location;
|
|
use App\Models\Source;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Database\Seeder;
|
|
use Illuminate\Support\Str;
|
|
|
|
class EventSeeder extends Seeder
|
|
{
|
|
/**
|
|
* Run the database seeds.
|
|
*/
|
|
public function run(): void
|
|
{
|
|
// Locations erstellen
|
|
$locations = [
|
|
[
|
|
'name' => 'Tiergarten Berlin',
|
|
'street' => 'Straße des 17. Juni',
|
|
'house_number' => '100',
|
|
'postal_code' => '10785',
|
|
'city' => 'Berlin',
|
|
'state' => 'Berlin',
|
|
'country' => 'Germany',
|
|
'phone' => '+49 30 39403501',
|
|
'email' => 'info@tiergarten.de',
|
|
'website' => 'https://www.tiergarten.de',
|
|
],
|
|
[
|
|
'name' => 'Kunsthalle München',
|
|
'street' => 'Theresienstraße',
|
|
'house_number' => '15',
|
|
'postal_code' => '80333',
|
|
'city' => 'München',
|
|
'state' => 'Bayern',
|
|
'country' => 'Germany',
|
|
'phone' => '+49 89 598183360',
|
|
'email' => 'info@kunsthalle-muenchen.de',
|
|
'website' => 'https://www.kunsthalle-muenchen.de',
|
|
],
|
|
[
|
|
'name' => 'Rathaus Hamburg',
|
|
'street' => 'Rathausplatz',
|
|
'house_number' => '1',
|
|
'postal_code' => '20095',
|
|
'city' => 'Hamburg',
|
|
'state' => 'Hamburg',
|
|
'country' => 'Germany',
|
|
'phone' => '+49 40 4288332211',
|
|
'email' => 'events@hamburg.de',
|
|
'website' => 'https://www.hamburg.de',
|
|
],
|
|
[
|
|
'name' => 'Cinemaxx Köln',
|
|
'street' => 'Hansaring',
|
|
'house_number' => '72-76',
|
|
'postal_code' => '50670',
|
|
'city' => 'Köln',
|
|
'state' => 'Nordrhein-Westfalen',
|
|
'country' => 'Germany',
|
|
'phone' => '+49 221 5677580',
|
|
'email' => 'info@cinemaxx-koeln.de',
|
|
'website' => 'https://www.cinemaxx.de',
|
|
],
|
|
[
|
|
'name' => 'Convention Center Frankfurt',
|
|
'street' => 'Ludwigstraße',
|
|
'house_number' => '285',
|
|
'postal_code' => '60327',
|
|
'city' => 'Frankfurt',
|
|
'state' => 'Hessen',
|
|
'country' => 'Germany',
|
|
'phone' => '+49 69 7566960',
|
|
'email' => 'info@convention-frankfurt.de',
|
|
'website' => 'https://www.convention-frankfurt.de',
|
|
],
|
|
[
|
|
'name' => 'Staatstheater Stuttgart',
|
|
'street' => 'Königstraße',
|
|
'house_number' => '6',
|
|
'postal_code' => '70173',
|
|
'city' => 'Stuttgart',
|
|
'state' => 'Baden-Württemberg',
|
|
'country' => 'Germany',
|
|
'phone' => '+49 711 2090500',
|
|
'email' => 'info@staatstheater-stuttgart.de',
|
|
'website' => 'https://www.staatstheater-stuttgart.de',
|
|
],
|
|
[
|
|
'name' => 'Altstadt Nürnberg',
|
|
'street' => 'Marktplatz',
|
|
'house_number' => '25',
|
|
'postal_code' => '90403',
|
|
'city' => 'Nürnberg',
|
|
'state' => 'Bayern',
|
|
'country' => 'Germany',
|
|
'phone' => '+49 911 2336123',
|
|
'email' => 'info@nuernberg-events.de',
|
|
'website' => 'https://www.nuernberg.de',
|
|
],
|
|
[
|
|
'name' => 'Stadtpark Düsseldorf',
|
|
'street' => 'Königsallee',
|
|
'house_number' => '60',
|
|
'postal_code' => '40212',
|
|
'city' => 'Düsseldorf',
|
|
'state' => 'Nordrhein-Westfalen',
|
|
'country' => 'Germany',
|
|
'phone' => '+49 211 8991000',
|
|
'email' => 'info@duesseldorf-events.de',
|
|
'website' => 'https://www.duesseldorf.de',
|
|
],
|
|
[
|
|
'name' => 'Stadtbibliothek Leipzig',
|
|
'street' => 'Wilhelmstraße',
|
|
'house_number' => '32',
|
|
'postal_code' => '04109',
|
|
'city' => 'Leipzig',
|
|
'state' => 'Sachsen',
|
|
'country' => 'Germany',
|
|
'phone' => '+49 341 1233503',
|
|
'email' => 'info@leipzig-bibliothek.de',
|
|
'website' => 'https://www.leipzig-bibliothek.de',
|
|
],
|
|
[
|
|
'name' => 'Kochschule Meyer Dresden',
|
|
'street' => 'Königstraße',
|
|
'house_number' => '15',
|
|
'postal_code' => '01097',
|
|
'city' => 'Dresden',
|
|
'state' => 'Sachsen',
|
|
'country' => 'Germany',
|
|
'phone' => '+49 351 4956789',
|
|
'email' => 'info@kochschule-meyer.de',
|
|
'website' => 'https://www.kochschule-meyer.de',
|
|
],
|
|
];
|
|
|
|
$locationMap = [];
|
|
foreach ($locations as $locationData) {
|
|
// Automatisch Slug generieren wenn nicht vorhanden
|
|
if (!isset($locationData['slug'])) {
|
|
$locationData['slug'] = Str::slug($locationData['name']);
|
|
}
|
|
|
|
$location = Location::firstOrCreate(
|
|
['name' => $locationData['name']],
|
|
$locationData
|
|
);
|
|
$locationMap[] = $location->id;
|
|
}
|
|
|
|
// Source erstellen
|
|
$source = Source::firstOrCreate(['name' => 'Demo Source']);
|
|
|
|
$events = [
|
|
[
|
|
'title' => 'Jazz-Konzert im Park',
|
|
'description' => 'Ein wunderschönes Jazz-Konzert mit bekannten Künstlern unter freiem Himmel. Genießen Sie klassischen Jazz bei schönem Wetter.',
|
|
'location_idx' => 0,
|
|
'category' => 'Musik',
|
|
'image_url' => null,
|
|
],
|
|
[
|
|
'title' => 'Kunstausstellung "Modern Wonders"',
|
|
'description' => 'Zeitgenössische Kunstwerke von internationalen Künstlern. Eine Reise durch moderne Kunstrichtungen.',
|
|
'location_idx' => 1,
|
|
'category' => 'Kunst',
|
|
'image_url' => null,
|
|
],
|
|
[
|
|
'title' => 'Marathon 2026',
|
|
'description' => 'Halbmarathon durch die Stadt. Meldung erforderlich. Für verschiedene Leistungsstufen geeignet.',
|
|
'location_idx' => 2,
|
|
'category' => 'Sport',
|
|
'image_url' => null,
|
|
],
|
|
[
|
|
'title' => 'Film-Festival "Indie Nights"',
|
|
'description' => 'Die besten Independentfilme des Jahres. Entdecken Sie neue Talente im internationalen Kino.',
|
|
'location_idx' => 3,
|
|
'category' => 'Film',
|
|
'image_url' => null,
|
|
],
|
|
[
|
|
'title' => 'Technologie-Konferenz 2026',
|
|
'description' => 'Die neuesten Trends in AI und Cloud Computing. Vorträge von Experten und Networking-Sessions.',
|
|
'location_idx' => 4,
|
|
'category' => 'Technologie',
|
|
'image_url' => null,
|
|
],
|
|
[
|
|
'title' => 'Theaterstück: "Der Traum"',
|
|
'description' => 'Eine klassische Theaterproduktion in moderner Inszenierung. Ein Muss für Theaterliebhaber.',
|
|
'location_idx' => 5,
|
|
'category' => 'Theater',
|
|
'image_url' => null,
|
|
],
|
|
[
|
|
'title' => 'Sommerfest Altstadt',
|
|
'description' => 'Traditionelles Volksfest mit Musik, Essen und Unterhaltung für die ganze Familie.',
|
|
'location_idx' => 6,
|
|
'category' => 'Festival',
|
|
'image_url' => null,
|
|
],
|
|
[
|
|
'title' => 'Yoga und Meditation Workshop',
|
|
'description' => 'Kostenloser Workshop für Anfänger und Fortgeschrittene. Bitte Matte mitbringen.',
|
|
'location_idx' => 7,
|
|
'category' => 'Wellness',
|
|
'image_url' => null,
|
|
],
|
|
[
|
|
'title' => 'Buchlesung: "Das Erbe"',
|
|
'description' => 'Die Autorin liest aus ihrem neuen Roman. Anschließend Signieren und Austausch mit Lesern.',
|
|
'location_idx' => 8,
|
|
'category' => 'Literatur',
|
|
'image_url' => null,
|
|
],
|
|
[
|
|
'title' => 'Kochkurs "Italienische Küche"',
|
|
'description' => 'Lernen Sie authentische italienische Gerichte von einem Proffikoch. Inkl. Verkostung.',
|
|
'location_idx' => 9,
|
|
'category' => 'Kulinarik',
|
|
'image_url' => null,
|
|
],
|
|
];
|
|
|
|
foreach ($events as $eventData) {
|
|
$event = Event::create([
|
|
'source_id' => $source->id,
|
|
'location_id' => $locationMap[$eventData['location_idx']],
|
|
'title' => $eventData['title'],
|
|
'description' => $eventData['description'],
|
|
'category' => $eventData['category'],
|
|
'slug' => \Illuminate\Support\Str::slug($eventData['title']),
|
|
'image_url' => $eventData['image_url'],
|
|
'status' => 'published',
|
|
]);
|
|
|
|
// Erste Termin
|
|
EventOccurrence::create([
|
|
'event_id' => $event->id,
|
|
'start_datetime' => Carbon::now()->addDays(rand(5, 15))->setHour(rand(14, 19))->setMinute(0),
|
|
'end_datetime' => Carbon::now()->addDays(rand(5, 15))->setHour(rand(20, 23))->setMinute(0),
|
|
'status' => 'scheduled',
|
|
]);
|
|
|
|
// Zweiter Termin
|
|
EventOccurrence::create([
|
|
'event_id' => $event->id,
|
|
'start_datetime' => Carbon::now()->addDays(rand(20, 40))->setHour(rand(14, 19))->setMinute(0),
|
|
'end_datetime' => Carbon::now()->addDays(rand(20, 40))->setHour(rand(20, 23))->setMinute(0),
|
|
'status' => 'scheduled',
|
|
]);
|
|
|
|
// Dritter Termin
|
|
EventOccurrence::create([
|
|
'event_id' => $event->id,
|
|
'start_datetime' => Carbon::now()->addDays(rand(45, 90))->setHour(rand(14, 19))->setMinute(0),
|
|
'end_datetime' => Carbon::now()->addDays(rand(45, 90))->setHour(rand(20, 23))->setMinute(0),
|
|
'status' => 'scheduled',
|
|
]);
|
|
}
|
|
}
|
|
}
|