3 use Illuminate\Database\Migrations\Migration;
4 use Illuminate\Database\Schema\Blueprint;
5 use Illuminate\Support\Facades\DB;
6 use Illuminate\Support\Facades\Schema;
7 use Illuminate\Support\Str;
9 return new class extends Migration
14 public function up(): void
16 Schema::table('users', function (Blueprint $table) {
17 $table->string('slug', 180);
21 DB::table('users')->cursor()->each(function ($user) use (&$slugMap) {
22 $userSlug = Str::slug($user->name);
23 while (isset($slugMap[$userSlug])) {
24 $userSlug = Str::slug($user->name . Str::random(4));
26 $slugMap[$userSlug] = true;
29 ->where('id', $user->id)
30 ->update(['slug' => $userSlug]);
33 Schema::table('users', function (Blueprint $table) {
34 $table->unique('slug');
39 * Reverse the migrations.
41 public function down(): void
43 Schema::table('users', function (Blueprint $table) {
44 $table->dropColumn('slug');