getRelatedSlugs($slug, $tableName, $columnName, $id); // If we haven't used it before then we are all good. if (! $allSlugs->contains("$columnName", $slug)) { return $slug; } // Just append numbers like a savage until we find not used. for ($i = 1; $i <= 1000000000; $i++) { $newSlug = $slug.$separator.$i; if (! $allSlugs->contains("$columnName", $newSlug)) { return $newSlug; } } throw new Exception('Can not create a unique slug'); } private function getRelatedSlugs(string $slug, string $tableName, string $columnName, int $id = 0): Collection { return DB::table($tableName) ->select("$columnName")->where("$columnName", 'like', $slug.'%') ->where('id', '<>', $id) ->get(); } }