3 use Illuminate\Database\Migrations\Migration;
4 use Illuminate\Database\Schema\Blueprint;
5 use Illuminate\Support\Facades\Schema;
6 use Illuminate\Support\Str;
8 return new class extends Migration
17 Schema::table('users', function (Blueprint $table) {
18 $table->string('slug', 180);
22 DB::table('users')->cursor()->each(function ($user) use (&$slugMap) {
23 $userSlug = Str::slug($user->name);
24 while (isset($slugMap[$userSlug])) {
25 $userSlug = Str::slug($user->name . Str::random(4));
27 $slugMap[$userSlug] = true;
30 ->where('id', $user->id)
31 ->update(['slug' => $userSlug]);
34 Schema::table('users', function (Blueprint $table) {
35 $table->unique('slug');
40 * Reverse the migrations.
44 public function down()
46 Schema::table('users', function (Blueprint $table) {
47 $table->dropColumn('slug');