fix: slug name
This commit is contained in:
@@ -59,7 +59,7 @@ public function store(Request $request)
|
||||
], 422);
|
||||
}
|
||||
|
||||
$data['slug'] = Str::slug($data['name']);
|
||||
$data['slug'] = $this->uniqueSlug($data['name']);
|
||||
|
||||
// An uploaded image file takes precedence over a provided image_id.
|
||||
$data['image_id'] = $this->uploadedImageId($request) ?? ($data['image_id'] ?? null);
|
||||
@@ -138,7 +138,7 @@ public function update(Request $request, $id)
|
||||
]);
|
||||
|
||||
if (isset($data['name'])) {
|
||||
$data['slug'] = Str::slug($data['name']);
|
||||
$data['slug'] = $this->uniqueSlug($data['name'], $playlist->id);
|
||||
}
|
||||
|
||||
// An uploaded image file takes precedence over a provided image_id.
|
||||
@@ -165,6 +165,29 @@ public function update(Request $request, $id)
|
||||
]);
|
||||
}
|
||||
|
||||
// Build a slug that is unique within music_playlists. Persian names often
|
||||
// transliterate to the same/empty value, so we fall back and add a counter.
|
||||
private function uniqueSlug(string $name, ?int $ignoreId = null): string
|
||||
{
|
||||
$base = Str::slug($name);
|
||||
if ($base === '') {
|
||||
$base = 'playlist';
|
||||
}
|
||||
|
||||
$slug = $base;
|
||||
$i = 2;
|
||||
while (
|
||||
MusicPlaylist::where('slug', $slug)
|
||||
->when($ignoreId, fn ($q) => $q->where('id', '!=', $ignoreId))
|
||||
->exists()
|
||||
) {
|
||||
$slug = "{$base}-{$i}";
|
||||
$i++;
|
||||
}
|
||||
|
||||
return $slug;
|
||||
}
|
||||
|
||||
public function destroy($id)
|
||||
{
|
||||
$playlist = MusicPlaylist::findOrFail($id);
|
||||
|
||||
Reference in New Issue
Block a user