diff --git a/app/Http/Controllers/BookController.php b/app/Http/Controllers/BookController.php index 7aed33d19..6791c0f2a 100644 --- a/app/Http/Controllers/BookController.php +++ b/app/Http/Controllers/BookController.php @@ -61,11 +61,7 @@ class BookController extends Controller 'description' => 'string|max:1000' ]); $book = $this->bookRepo->newFromInput($request->all()); - $slug = Str::slug($book->name); - while($this->bookRepo->countBySlug($slug) > 0) { - $slug .= '1'; - } - $book->slug = $slug; + $book->slug = $this->bookRepo->findSuitableSlug($book->name); $book->created_by = Auth::user()->id; $book->updated_by = Auth::user()->id; $book->save(); @@ -111,11 +107,7 @@ class BookController extends Controller 'description' => 'string|max:1000' ]); $book->fill($request->all()); - $slug = Str::slug($book->name); - while($this->bookRepo->countBySlug($slug) > 0 && $book->slug != $slug) { - $slug += '1'; - } - $book->slug = $slug; + $book->slug = $this->bookRepo->findSuitableSlug($book->name, $book->id); $book->updated_by = Auth::user()->id; $book->save(); return redirect($book->getUrl()); diff --git a/app/Repos/BookRepo.php b/app/Repos/BookRepo.php index 5a772539f..488478aac 100644 --- a/app/Repos/BookRepo.php +++ b/app/Repos/BookRepo.php @@ -1,5 +1,6 @@ priority + 1 : 0; } + public function doesSlugExist($slug, $currentId = false) + { + $query = $this->book->where('slug', '=', $slug); + if($currentId) { + $query = $query->where('id', '!=', $currentId); + } + return $query->count() > 0; + } + + public function findSuitableSlug($name, $currentId = false) + { + $slug = Str::slug($name); + while($this->doesSlugExist($slug, $currentId)) { + $slug .= '-' . substr(md5(rand(1, 500)), 0, 3); + } + return $slug; + } + } \ No newline at end of file diff --git a/app/User.php b/app/User.php index 1a4e20810..2e37fe484 100644 --- a/app/User.php +++ b/app/User.php @@ -24,7 +24,7 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon * * @var array */ - protected $fillable = ['name', 'email', 'password']; + protected $fillable = ['name', 'email']; /** * The attributes excluded from the model's JSON form.