51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
		
		
			
		
	
	
			51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
|  | <?php | ||
|  | 
 | ||
|  | use Illuminate\Database\Migrations\Migration; | ||
|  | use Illuminate\Database\Schema\Blueprint; | ||
|  | use Illuminate\Support\Facades\Schema; | ||
|  | use Illuminate\Support\Str; | ||
|  | 
 | ||
|  | class AddUserSlug extends Migration | ||
|  | { | ||
|  |     /** | ||
|  |      * Run the migrations. | ||
|  |      * | ||
|  |      * @return void | ||
|  |      */ | ||
|  |     public function up() | ||
|  |     { | ||
|  |         Schema::table('users', function (Blueprint $table) { | ||
|  |             $table->string('slug', 250); | ||
|  |         }); | ||
|  | 
 | ||
|  |         $slugMap = []; | ||
|  |         DB::table('users')->cursor()->each(function ($user) use (&$slugMap) { | ||
|  |             $userSlug = Str::slug($user->name); | ||
|  |             while (isset($slugMap[$userSlug])) { | ||
|  |                 $userSlug = Str::slug($user->name . Str::random(4)); | ||
|  |             } | ||
|  |             $slugMap[$userSlug] = true; | ||
|  | 
 | ||
|  |             DB::table('users') | ||
|  |                 ->where('id', $user->id) | ||
|  |                 ->update(['slug' => $userSlug]); | ||
|  |         }); | ||
|  | 
 | ||
|  |         Schema::table('users', function (Blueprint $table) { | ||
|  |             $table->unique('slug'); | ||
|  |         }); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Reverse the migrations. | ||
|  |      * | ||
|  |      * @return void | ||
|  |      */ | ||
|  |     public function down() | ||
|  |     { | ||
|  |         Schema::table('users', function (Blueprint $table) { | ||
|  |             $table->dropColumn('slug'); | ||
|  |         }); | ||
|  |     } | ||
|  | } |