| 
									
										
										
										
											2021-03-09 06:34:22 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use Illuminate\Database\Migrations\Migration; | 
					
						
							|  |  |  | use Illuminate\Database\Schema\Blueprint; | 
					
						
							| 
									
										
										
										
											2024-03-17 23:29:09 +08:00
										 |  |  | use Illuminate\Support\Facades\DB; | 
					
						
							| 
									
										
										
										
											2021-03-09 06:34:22 +08:00
										 |  |  | use Illuminate\Support\Facades\Schema; | 
					
						
							|  |  |  | use Illuminate\Support\Str; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-07 00:58:29 +08:00
										 |  |  | return new class extends Migration | 
					
						
							| 
									
										
										
										
											2021-03-09 06:34:22 +08:00
										 |  |  | { | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Run the migrations. | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2024-03-17 23:29:09 +08:00
										 |  |  |     public function up(): void | 
					
						
							| 
									
										
										
										
											2021-03-09 06:34:22 +08:00
										 |  |  |     { | 
					
						
							|  |  |  |         Schema::table('users', function (Blueprint $table) { | 
					
						
							| 
									
										
										
										
											2021-04-28 03:53:22 +08:00
										 |  |  |             $table->string('slug', 180); | 
					
						
							| 
									
										
										
										
											2021-03-09 06:34:22 +08:00
										 |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $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. | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2024-03-17 23:29:09 +08:00
										 |  |  |     public function down(): void | 
					
						
							| 
									
										
										
										
											2021-03-09 06:34:22 +08:00
										 |  |  |     { | 
					
						
							|  |  |  |         Schema::table('users', function (Blueprint $table) { | 
					
						
							|  |  |  |             $table->dropColumn('slug'); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-02-07 00:58:29 +08:00
										 |  |  | }; |