id(); $table->string('name'); $table->string('slug')->unique(); $table->string('title'); $table->string('images_path')->default('uploads'); $table->boolean('is_public')->default(true); $table->boolean('allow_ai_styles')->default(true); $table->boolean('allow_print')->default(true); $table->boolean('require_password')->default(false); $table->string('password_hash')->nullable(); $table->timestamp('expires_at')->nullable(); $table->unsignedInteger('access_duration_minutes')->nullable(); $table->timestamps(); }); $defaultGalleryId = DB::table('galleries')->insertGetId([ 'name' => 'Default Gallery', 'slug' => Str::uuid()->toString(), 'title' => 'Style Gallery', 'images_path' => 'uploads', 'is_public' => true, 'allow_ai_styles' => true, 'allow_print' => true, 'require_password' => false, 'password_hash' => null, 'expires_at' => null, 'access_duration_minutes' => null, 'created_at' => now(), 'updated_at' => now(), ]); Schema::table('images', function (Blueprint $table) use ($defaultGalleryId): void { $table->foreignId('gallery_id') ->after('id') ->default($defaultGalleryId) ->constrained(); }); } /** * Reverse the migrations. */ public function down(): void { Schema::table('images', function (Blueprint $table): void { if (Schema::hasColumn('images', 'gallery_id')) { $table->dropConstrainedForeignId('gallery_id'); } }); Schema::dropIfExists('galleries'); } };