From 6265c8cf77a7756b9744ac20469c6879e7bb8774 Mon Sep 17 00:00:00 2001 From: A1Gard Date: Sat, 22 Jun 2024 22:01:20 +0330 Subject: [PATCH] added slug unique fixer to xcontroller --- app/Http/Controllers/XController.php | 35 ++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/XController.php b/app/Http/Controllers/XController.php index f2af53c..384d65d 100644 --- a/app/Http/Controllers/XController.php +++ b/app/Http/Controllers/XController.php @@ -225,10 +225,41 @@ abstract class XController extends Controller public function getSlug($model, $key = 'slug', $name = 'name') { if (!\request()->has('slug') || request()->input('slug') == null) { - return sluger($model->$name); + $slug = sluger($model->$name); } else { - return sluger(\request()->input($key, $model->$name)); + $slug = sluger(\request()->input($key, $model->$name)); } + + return $this->createUniqueSlug($slug,$model->id); + } + + + /** + * create unique slug + * @param $slug + * @param $id integer|null + * @return mixed|string + */ + public function createUniqueSlug($slug,$id = null) + { + $originalSlug = $slug; + $counter = 1; + + $q = $this->_MODEL_::where('slug', $slug); + if ($id != null){ + $q = $q->where('id','<>',$id); + } + + while ($q->count() > 0) { + $slug = $originalSlug . '-' . $counter; + $counter++; + $q = $this->_MODEL_::where('slug', $slug); + if ($id != null){ + $q = $q->where('id','<>',$id); + } + } + + return $slug; } }