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');
 | |
|         });
 | |
|     }
 | |
| }
 |