diff --git a/app/Models/Category.php b/app/Models/Category.php index 5f2e582c..865247a7 100644 --- a/app/Models/Category.php +++ b/app/Models/Category.php @@ -46,6 +46,16 @@ class Category extends Model return $this->hasMany(CategoryTranslation::class); } + /** + * Name aus der bereits (locale-gefiltert) geladenen Übersetzung, mit + * `#id`-Fallback, falls keine Übersetzung vorliegt. Erwartet eine + * eager-geladene `translations`-Relation der gewünschten Sprache. + */ + public function localizedName(): string + { + return $this->translations->first()?->name ?? '#'.$this->id; + } + public function pressReleases(): HasMany { return $this->hasMany(PressRelease::class); diff --git a/resources/views/livewire/admin/categories/create.blade.php b/resources/views/livewire/admin/categories/create.blade.php index e2e5bf05..eb7e954a 100644 --- a/resources/views/livewire/admin/categories/create.blade.php +++ b/resources/views/livewire/admin/categories/create.blade.php @@ -219,7 +219,7 @@ new #[Layout('components.layouts.app'), Title('Kategorie anlegen')] class extend @foreach ($parentOptions as $parent) @endforeach diff --git a/resources/views/livewire/admin/categories/edit.blade.php b/resources/views/livewire/admin/categories/edit.blade.php index 3f662642..69392dbe 100644 --- a/resources/views/livewire/admin/categories/edit.blade.php +++ b/resources/views/livewire/admin/categories/edit.blade.php @@ -270,7 +270,7 @@ new #[Layout('components.layouts.app'), Title('Kategorie bearbeiten')] class ext @foreach ($parentOptions as $parent) @endforeach diff --git a/resources/views/livewire/admin/footer-codes/create.blade.php b/resources/views/livewire/admin/footer-codes/create.blade.php index a319a62e..70b438a4 100644 --- a/resources/views/livewire/admin/footer-codes/create.blade.php +++ b/resources/views/livewire/admin/footer-codes/create.blade.php @@ -68,7 +68,7 @@ new #[Layout('components.layouts.app'), Title('Footer-Code anlegen')] class exte ->get() ->map(fn (Category $cat) => [ 'id' => $cat->id, - 'name' => $cat->translations->first()?->name ?? '#'.$cat->id, + 'name' => $cat->localizedName(), 'portal' => $cat->portal->value, ]), ]; diff --git a/resources/views/livewire/admin/footer-codes/edit.blade.php b/resources/views/livewire/admin/footer-codes/edit.blade.php index c470a588..bdc2a837 100644 --- a/resources/views/livewire/admin/footer-codes/edit.blade.php +++ b/resources/views/livewire/admin/footer-codes/edit.blade.php @@ -99,7 +99,7 @@ new #[Layout('components.layouts.app'), Title('Footer-Code bearbeiten')] class e ->get() ->map(fn (Category $cat) => [ 'id' => $cat->id, - 'name' => $cat->translations->first()?->name ?? '#'.$cat->id, + 'name' => $cat->localizedName(), 'portal' => $cat->portal->value, ]), ]; diff --git a/tests/Feature/CategoryLocalizedNameTest.php b/tests/Feature/CategoryLocalizedNameTest.php new file mode 100644 index 00000000..fa5b3c72 --- /dev/null +++ b/tests/Feature/CategoryLocalizedNameTest.php @@ -0,0 +1,18 @@ +withTranslations()->create(); + $category->load(['translations' => fn ($query) => $query->where('locale', 'de')]); + + $expected = $category->translations->first()->name; + + expect($category->localizedName())->toBe($expected); +}); + +test('localizedName falls back to the id when no translation is loaded', function () { + $category = Category::factory()->create(); + + expect($category->localizedName())->toBe('#'.$category->id); +});